我的OpenCV学习笔记(12):VideoCapture类

这次通过一个读取视频的综合例子来介绍VideoCapture类的一些基本操作:

#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main()
{
	//打开视频文件:其实就是建立一个VideoCapture结构
	VideoCapture capture("D:/videos/PetsD2TeC2.avi");
	//检测是否正常打开:成功打开时,isOpened返回ture
	if(!capture.isOpened())
		cout<<"fail to open!"<0时会等待delay毫秒
		//当时间结束前没有按键按下时,返回值为-1;否则返回按键


		int c = waitKey(delay);
		//按下ESC或者到达指定的结束帧后退出读取视频
		if((char) c == 27 || currentFrame > frameToStop)
		{
			stop = true;
		}
		//按下按键后会停留在当前帧,等待下一次按键
		if( c >= 0)
		{
			waitKey(0);
		}
		currentFrame++;
	
	}
	//关闭视频文件
	capture.release();
	waitKey(0);
	return 0;
}


注释比较详尽,相信大家都能看得懂,这里再做几点补充:

1.由于原视频是网络摄像头采集的,所以有很多雪花点,在这里进行了简单的均值滤波处理。

2.虽然VideoCapture类中有grab(捕获下一帧)和retrieve(对该帧进行解码)操作,但是直接用read比较简单。

3.get函数的功能很强大,可以获取关于视频的大部分信息,具体内容可以查看帮助手册。

4.为了保证视频播放的流畅性,帧与帧之间加入了时延。这个时延是通过帧率算出来的。

你可能感兴趣的:(我的OpenCV学习笔记(12):VideoCapture类)