opencv学习系列——视频格式的读取

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43943977/article/details/102638198

opencv学习系列——视频格式的读取

视频读取本质上就是读取图像,因为视频是由一帧一帧图像组成的。1秒24帧基本就能流畅的读取视频了。
(1)打开视频文件
A. VideoCapture cap;
cap.open(Path);
B. VideoCapture cap(Path);
(2)循环读取每一帧
while(1)
{
Mat frame; //定义Mat变量,用来存储每一帧
cap>>frame; //读取当前帧方法一
//cap.read(frame); //读取当前帧方法二
imshow(“视频显示”, frame); //显示一帧画面
waitKey(30); //延时30ms
}
(3)控制视频窗口大小:resizewindow函数
namedWindow(“video”, 0);
resizeWindow(“video”, 600, 400);
读取mp4格式视频示例:
在这里插入图片描述在这里插入图片描述
注意:未来保证图片能够保持一段时间,我们要使用waitKey()函数,这是括号中可以加上时间数值表示每一帧图像的停留时间,如果使用视频格式本来的帧数和每一帧的时间,可以:
double fps = cap.get(CV_CAP_PROP_FPS); //获取视频帧率
double pauseTime = 1000 / fps; //两幅画面中间间隔
waitKey(pauseTime);//每帧延时20毫秒
调节waitkey()的时间数值就可以实现视频的倍速播放:
2倍速:waitKey(0.5pauseTime)
0.5倍速:waitKey(2
pauseTime)
附上源代码:

#include<opencv2/opencv.hpp>
using namespace cv;

void main(){
    VideoCapture cap;
    cap.open("E://2.mp4"); //打开视频,以上两句等价于VideoCapture cap("E://2.mp4");

    //cap.open("http://www.laganiere.name/bike.mp4");//也可以直接从网页中获取图片,前提是网页有视频,以及网速够快
    if(!cap.isOpened())//如果视频不能正常打开则返回
        return;
    Mat frame;
    while(1)
    {
        cap>>frame;//等价于cap.read(frame);
        if(frame.empty())//如果某帧为空则退出循环
            break;
        imshow("video", frame);
        waitKey(20);//每帧延时20毫秒
    }
    cap.release();//释放资源
}

猜你喜欢

转载自blog.csdn.net/weixin_43943977/article/details/102638198
今日推荐