一、前言
使用Opencv播放视频,几乎与使用它来显示图像一样容易。播放视频时只需要处理的新问题是如何循环地读取视频中的每一帧,以及如何从枯燥的电影视频的读取中退出该循环操作。
二、函数解析
1、VideoCapture函数
函数功能:创建一个VideoCapture类的实例,如果传入对应的参数,可以直接打开视频文件或者要调用的摄像头。
构造函数:
cv::VideoCapture::VideoCapture(const string& filename) //默认构造函数
//实例
VideoCapture capture("test.mp4");//定义一个VideoCapture类的局部变量,不一定要使用capture,其他变量名也可。
//另一种方法
VideoCapture capture;//先定义一个VideoCapture类的变量
capture.open("test.mp4");//在获取视频文件
2、isOpened函数
函数功能:判断视频捕捉是否已经初始化,若是,则返回true。
构造函数:
cv::VideoCapture::isOpened()//默认构造函数
//实例
capture.isOpened();
3、release函数
函数功能:关闭视频文件或捕捉设备
构造函数:
cv::VideoCapture::release()//默认构造函数
//实例
capture.release();
该方法被videoccapture::open和videoccapture析构函数自动调用,因而无需再次调用。
三、代码实例
#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
namedWindow("video player", WINDOW_AUTOSIZE);//创建一个窗口,尺寸设为自动调整
//方法一
//VideoCapture capture("C:\\Users\\15916\\Downloads\\《开局之年》总宣传片_好看视频.mp4");
//方法二
VideoCapture capture;
capture.open("C:\\Users\\15916\\Downloads\\《开局之年》总宣传片_好看视频.mp4");
if (!capture.isOpened()) {
cout << "read video failed!" <<endl ;//判断是否初始化成功
}
while (1)
{
Mat frame; // 定义一个Mat变量,用于存储每一帧的图像
capture >> frame; // 读取当前帧
// 若视频播放完成,退出循环
if (frame.empty())
{
break;
}
imshow("video player", frame); // 显示当前帧
char c=waitKey(10); // 延时30ms
if (c == 27) break; //如果触发Esc键,跳出循环,终止播放视频
}
capture.release();//可以不加
return 0;
}