OpenCV学习(2)读取视频和摄像头

#include "stdafx.h"
#include<iostream>
#include<string>
#include<sstream>
using namespace std;

#include"opencv2/core.hpp"
#include"opencv2/highgui.hpp"
using namespace cv;

int main( int argc, const char** argv)
{

  VideoCapture cap(0); //打开默认相机
  if (!cap.isOpened()) return -1;

  namedWindow(
"Video", 1);   for (;;)   {     Mat frame;     cap >> frame; //摄像机的帧     imshow("Video", frame);     if (waitKey(30) != -1) break;   }
  
  //释放的摄像机或视频cap   cap.release(); return 0; }

好吧,书本上这一节本来重点讲的是命令行解析器。但书上的代码在我的vs上无法编译通过(课本的编译环境是Cmake)。所以我只好自己写。

OpenCV新版本中,videocapture类属于videoio子模块。他的参数可以是文件的路径(一个字符串)或者0(表示打开默认相机)。当然也可以设置路径让他打开外连摄像机。

检查是否可以读取文件名或者摄像机,可以使用isOpened函数。

最后,用namedWindow函数创建一个显示帧的窗口。在非完成循环中,如果正确地检索帧,通过>>操作可以抓住每个帧,并且用imshow函数显示图像。同时,我设置了waitKey函数来让我可以停止循环。waitKey()函数的返回值是按键的ASCII码。什么都不按的ASCII码是-1。所以那句话的意思就是,只要我按下任意一个键(不包括鼠标),程序就会结束运行。

不要忘记用release函数释放所有的视频资源,否则RAM内存会被全部消耗掉。release函数还可以释放矩阵。

原文地址:https://www.cnblogs.com/Shymuel/p/8495367.html