OpenCV读取视频的格式注意点
OpenCV读取视频
一、相关说明
1、原理:OpenCV读取视频包括从视频文件和摄像头读取。读取视频其实就是读取每一帧,相当于把每一帧当做图像来读取显示。
2、cvCapture结构体
cvCapture是一个保存图像捕获所需的信息的结构体。 从摄像头和视频文件播放视频必须是从第一帧来时一帧一帧的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。比如从视频文件中获取,需要保存视频文 件的文件名,相应的解码器类型,下一次如果要获取将需要解码哪一桢等。这些信息都保存在cvCapture中,每获取一帧后,这些信息都将被更新,获取下一帧需要将新信息传给获取的Api接口。
3、解码器
解码器名:,XviD-1.1.3-27042008.exe
下载地址:http://pan.baidu.com/share/link?shareid=82963&uk=3087605183
解压器使用:安装即可使用
如果没有安装解码器,运行程序时,会报无法打开文件错误,如图
二、流程图
三、函数说明
1、cvCreateFileCapture
函数原型:CVAPI(CvCapture*) cvCreateFileCapture( const char*
filename );
返回值类型:CvCapture* 即cvCapture结构体指针,在cvQueryFrame中作为参数
参数说明:const char* filename 文件路径
2、cvCreateCameraCapture
函数原型:CVAPI(CvCapture*) cvCreateCameraCapture( int index );
返回值类型:CvCapture*
参数说明:int index,摄像头编号,只有在存在多个摄像头时才起作用,当index=-1时,表示随机选择一个。
3、cvQueryFrame
函数原型:CVAPI(IplImage*) cvQueryFrame( CvCapture* capture );
返回值类型:IplImage*,在cvShowImage中作为参数
参数说明:CvCapture* capture,cvCreateFileCapture或cvCreateCameraCapture中返回值
注意:以上部只介绍新的函数,其他没有列出来的函数请参考“OpenCV读取图片”
4、cvWaitKey
显示图片是cvWaitKey函数表示延迟也就是等待时间,这里表示显示视频的帧率,也就是播放视频的快慢。返回值为字符ASCII值,表示用户按下某键做相应的处理。
四、实现代码
注意:新建工程需要添加依赖库,详细请参考“VS 2008 下安装及配置OpenCV”
五、结果截图
如果视频播放不成功,请查看下面的注意事项:
1、视频文件路径一定要正确,且路径分隔符为“\\”
2、确保正确安装上面所说的解码器
3、AVI格式的文件,但也会有不能播放的,比如可能采用的编码不同,avi格式有以下四种
1)H.264/MPEG-4AVC VideoFormat(*.avi)是MPEG4.一种视频格式的扩展。具有更高的压缩率。
2)AVI —Audio-Video.lnterleaved(*.avi)是将与语言同步组成在一起的格式。
3)Lossless.uncompressed.AVI(*.avi)是主要用于用户视频编辑。
4)AVI:wieh DVcodec(*avi)是主要用于用户视频编辑格式,也是比较老的格式。
OpenCV所能支持的格式为第二种AVI —Audio-Video.lnterleaved,所以需要用软件装换下格式,比如“格式工厂”
4、读取摄像头时,要确保安装了与摄像头相关的驱动程序