opencv(C++)视频流读入-学习笔记3

opencv视频流读入C++实现

先附一张处理过的视频截图
opencv(C++)视频流读入-学习笔记3_第1张图片

介绍关于视频流的两个类

VideoCapture类

该类包括了从视频文件,图片集合,相机中读取视频

构造函数用法如下
摄像头读入:

VideoCapture cap(0);

0代表的是摄像头设备,如果只有一个写0即可;

文件读入

 VideoCapture cap(const String& filename);

文件路径+名

如果选择无参数的构造函数,需调用open来打开路径或设备。

VideoCapture cap();
cap.open(-----);

用isOpened()来检测是否打开成功;

if (!cap.isOpened())
        return -1;

重载运算符>>用于从视频流取得一帧(一幅图)送入mat中

Mat frame;
cap >> frame;

VideoWriter类

用于将图片集合写成视频文件

构造函数如下

int fps=15;
Size size(480,360);
VideoWriter vw("E:\\图像处理\\a.avi",CV_FOURCC_DEFAULT,fps,size);

1参数文件名
2参数编码格式,此处采用默认
3帧数每秒多少图
4视频尺寸
5 参数默认flag=true,代表写入彩色图 若设为false则为灰度图

采用无参数构函也可用open 函数,与上相同不多解释

也可用isOpened()函数检验

写入函数例子

vw.write(re_size3);

参数为Mat类型 ,所写如的图像必须大小一直 所以用resize()函数改了一下大小,并且是3通道的便于播放器播放。

视频播放与写入

视频播放

视频播放的是一张张的图片,播放帧率比较快,所以人眼看成连续。

根据思路写如下代码
waitkey为延时函数,延时30,如果过按下任意键返回大于等于0的数否则返回-1;相当于设置帧率

for (;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        imshow("real", frame);
        if (waitKey(30) >= 0) break;
    }

视频文件写入的也是是一张一张的图片,帧率由构造函数参数决定,上文以说。

    resize(edges, re_size1, size);
        cvtColor(re_size1, re_size3,COLOR_GRAY2BGR);//CV_GRAY2BGR
        imshow("edges", re_size3);

        vw.write(re_size3);

注意写入图片的大小一定要相等。

你可能感兴趣的:(opencv(C++)视频流读入-学习笔记3)