1.VideoCapture类
Opencv中提供了专门操作视频的接口类VideoCapture,VideoCapture类可以从文件或摄像头设备中读取视频,提供常用的三种构造方法如下:
VideoCapture::VideoCapture();
VideoCapture::VideoCapture(const string &filename);
VideoCapture::VideoCapture(int device);
参数filename表示视频文件的路径及名称;device表示打开视频操作索引号设置,如果是摄像头则设置为0。下表列出了VideoCapture中的对应方法及功能:
函数 | 功能 |
---|---|
VideoCapture::open | 打开视频文件或视频获取装置 |
VideoCapture::isOpened | 判断视频文件是否正确,返回true则正确 |
VideoCapture::release | 关闭视频流文件 |
VideoCapture::grab | 抓住下一帧的视频文件或捕获设备 |
VideoCapture::retrieve | 解码并返回了视频帧 |
VideoCapture::read | 抓住,解码并返回下一个视频帧 |
VideoCapture::get | 返回指定视频类的相关参数信息 |
VideoCapture::set | 设置类信息的一个属性 |
opertor>>方法利用函数重载提取单帧图像image,read方法的输入是Mat的引用,这种方式得到的实际是VideoCapture解析得到的单帧图像的引用,当后续再读取帧时,Mat数据将会自动释放,自动更新成新的数据信息。Mat复制构造函数和赋值操作共享数据空间,当需要同时获取多帧图像源时,可以利用Mat提供的Mat::clone()方法进行复制操作。
2.参考代码
如果默认笔记本/台式机只有一个USB摄像头,Index=0; 如果有2个,一般Index为0和1,根据具体情况区分,摄像头接入和断开会改变Index值
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>
void main()
{
cv::VideoCapture sensor;
sensor.open(1);
cv::Mat Image;
while (1)
{
sensor >> Image;
cv::imshow("video",Image);
cv::waitKey(30);
}
}