注意:结构体中的Cv第一个字母都是大写的,函数的cv都是小写的。
CvCapture结构体
用来保存图像捕获所需要的信息。提供两种方式从外部捕获图像:1, 摄像头;2,通过解码视频获得的图像。
两种方式都必须从第一帧开始一帧一帧的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。
比如从视频文件中获取,需要保存视频文件的文件名,相应的解码器类型,下一次如果要获取将需要解码哪一帧。这些信息都保存在Cvcapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧需要将新信息传给获取的api接口。
CvCapture * cvCreateFileCapture(char *name) 打开视频文件
通过输入一个要读取的avi文件的路径,返回一个指向CvCapture结构的指针。注意文件必须为avi的格式。否则返回空指针。
可通过安装解码器,来解决返回值为空的情况,也可向将文件进行转换再操作(狸窝全能视频转换器)。
IplImage* cvQueryFrame(CvCApture* capture) 获取视频中的帧
将视频文件的下一帧加载到内存。与cvLoadImg不同的是:该函数不重新分配内存空间,即用新的数据覆盖原来的数据。
void cvReleaseCapture(CvCapture** capture) 释放内存
释放为CvCapture结构体开辟的内存空间,关闭打开的AVI文件相关的文件句柄。
#include"opencv\highgui.h"
int main(){
cvNamedWindow("avi");
CvCapture* capture = cvCreateFileCapture("视频文件路径");
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;
}