Study notes for OpenCV——第四节:Opencv读取视频

本文介绍了使用OpenCV读取视频的基本步骤,包括通过cvCreateFileCapture读取视频文件、cvQueryFrame加载帧、cvWaitKey控制播放速度,以及解决可能出现的问题,如路径错误、解码器缺失等。同时提到了读取摄像头视频的方法和转换视频格式的工具。
摘要由CSDN通过智能技术生成

一、OpenCV读取视频

使用OpenCV播放视频,和用它来显示图像一样简单。播放视频的时候只需要明白如何循环地读取视频中的每一帧,和怎么退出循环操作。


(1)结构体CvCapture

CvCapture 是一个结构体,用来保存图像捕获所需要的信息。 

opencv提供两种方式从外部捕获图像
一种是从摄像头中,
一种是通过解码视频得到图像。

两种方式都必须从第一帧开始一帧一帧的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。
比如从视频文件中获取,需要保存视频文件的文件名,相应的解码器类型,下一次如果要获取将需要解码哪一帧等。 这些信息都保存在CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧需要将新信息传给获取的api接口.


(2)cvCreateFileCapture(char*name)


通过输入要读取的avi文件的路径,然后,该函数返回一个指向CvCapture结构体的指针。
(注意:区分cvCreateFileCapture(char*name)与结构体CvCapture中首字母c的大小写问题,记住结构体的首字母为大写

还要注意一个东西就是有可能变量capture没有值ox00000000,这个时候可能是需要装一个解码器)

(3)cvQueryFrame(capture)


输入一个CvCapture类型的指针,该函数主要功能是将视频文件的下一帧加载到内存。与cvLoadImage的不同之处是,该函数不重新分配内存空间。

(4)C=cvWaitKey(33)


当前帧被显示后,等待33毫秒。如果用户触发了一个按键,c会被设置成这个按键的ASCII码,否则会被设置成-1。
cvWaitKey(33)在此处的另外一个作用是,控制帧率。改变值,来控制帧率,值越大,播放速度越慢。

(5)cvReleaseCapture(&capture)


功能:释放为CvCapture结构体开辟的内存空间
关闭打开的AVI文件相关的文件句柄

补充:读取摄像头

只需把cvCreateFileCapture改成cvCreateCameraCapture即可。
该函数的输入参数是一个ID号,只有存在多个摄像头时才起作用。当ID=-1时,表示随机选择一个。

二、框架总结


三、具体例子代码:

// test_aiv_file.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "highgui.h"


int _tmain(int argc, _TCHAR* argv[])
{
	cvNamedWindow("avi");
	CvCapture* capture = cvCreateFileCapture("F:\\电影\\聚美优品广告 陈欧 我为自己代言 高清.avi");//大小写要注意;结构体首字母要大写
	//CvCapture* capture =cvCreateCameraCapture("");
	IplImage* frame;
	while(1)
	{
		frame=cvQueryFrame(capture);
		if(!frame)这里要注意!别写成中文格式的!
		{
			break;
		}
		cvShowImage("avi",frame);
		char c = cvWaitKey(33);
		if(c==27)
		{
			break;
		}
	}
	cvReleaseCapture(&capture);
	cvDestroyWindow("avi");
	return 0;
}
四、实验结果



实验没有成功,正在检查原因。。。。

五、OpenCV读取视频遇到常见问题

(1)视频文件路径没写对
(2)没有安装解码器
(3)如果使用的是Opencv2.0或更高版本,那么,能否正确加载opencv_ffmpeg210.dll
(4)尽管是AVI文件,但也可能使用了某种codec,例如:MJPEG Decompressor。 需要把它转换OpenCV支持的AVI文件. OpenCV支持的AVI。例如使用狸窝全能视频转换器,在《预置方案》处,选择AVI-Audio_Video Interleaved(*.avi)。或者使用格式工厂也可以。
(5)读摄像头数据,需要安装与摄像头相应的驱动程序。

重新实验了一下,利用狸窝全能视频转换器把视频转换了下格式和截取了一部分,终于成功了。

试验结果:


附录下载:

解码器:decoder

本文尚不成熟,希望大家提出宝贵意见。

敬请关注本博客和新浪微博To_捭阖_youth.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值