版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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(2pauseTime)
附上源代码:
#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();//释放资源
}