Qt+OpenCV联合开发(二十二)--摄像头及视频文件的读取

一、引言

在opencv中读写视频、调用摄像头很容易,主要涉及VideoCapture以及VideoWriter这两个类,分别负责视频的读、写操作

二、简述VideoCapture类

如下图所示,VideoCapture既支持视频文件(.avi , .mpg格式)的读取,也支持从笔记本自带摄像头中读取

Qt+OpenCV联合开发(二十二)--摄像头及视频文件的读取_第1张图片

1、 VideoCapture对象的创建

	VideoCapture capture(
	const string& filename, // 输入视频文件名
	);

	VideoCapture capture(
	int device // 摄像头设备id
	);

	VideoCapture capture();

1、 第一种方式:

直接利用VideoCapture类创建对象并传递视频绝对路径来打开视频


2、第二种方式:

从摄像头中读取视频,我们会给出一个标识符,用于表示我们想要访问的摄像头,这个标志符就是一个标志数字,如果只有1个摄像头,那么它的标志就是0,如果有2个,第二个标志数就是1,以此类推。

3、第三种方式:

仅仅创建一个捕获对象,而不提供任何关于打开的信息。创建以后通过成员函数open()来打开视频文件。如果打开成功,我们将可以开始读取视频的帧,且VideoCapture的成员函数isOpened()会返回true。(建议在打开视频或摄像头时都使用该成员函数判断是否打开成功)

Qt+OpenCV联合开发(二十二)--摄像头及视频文件的读取_第2张图片

2、读取视频

将视频帧读取到Mat矩阵中,有两种方式:一种是read()操作;另一种是 “>>”操作。

3、播放视频

VideoCapture类对象读入视频之后,用while循环将每一帧读取显示出来

Qt+OpenCV联合开发(二十二)--摄像头及视频文件的读取_第3张图片

三、实现效果

读取摄像头

Qt+OpenCV联合开发(二十二)--摄像头及视频文件的读取_第4张图片

四、代码


void test1::video_demo(Mat &image)
{
    VideoCapture capture(0);//打开摄像头

    Mat frame;
    while (true) {
        capture.read(frame);//读取每一帧
        flip(frame,frame,1);//左右翻转
        if(frame.empty())
        {
            break;
        }
        imshow("frame",frame);
        //这里可以做其他事情
        int c = waitKey(10);//如果没有特殊要求都是1
        if(c==27)
        {
            break;
        }
    }
    capture.release();//释放摄像头资源,实际会主动realse,手动确保它会释放
}

你可能感兴趣的:(Qt实战,C/C++,opencv,qt,opencv,计算机视觉)