/*
播放AVI视频
播放视频时,只需要处理的新问题就是如何循环地顺序读取视频中的每一帧,以及如何从枯燥的电影视频的读取中退出该循环操作。
*/
#include "highgui.h"
int main( int argc, char** argv ) {
cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
/*
函数cvCreateFileCapture()通过参数设置确定要读入的AVI文件,返回一个指向CvCapture结构的指针。这个
结构包括了所有要读入的AVI文件信息,其中包含状态信息。在调用这个函数之后,返回指针所指向的CvCapture结构
被初始化到所对应的AVI文件的开头
*/
CvCapture* capture = cvCaptureFromAVI( argv[1] ); // either one will work
// CvCapture* capture = cvCreateFileCapture( argv[1] );
IplImage* frame;
while(1) {
/*
cvQueryFrame()的参数为CvCapture结构的指针,用来读取下一帧视频文件载入内存(实际上是填充或者更新CvCapture结构中)
返回一个对应当前帧的指针。与cvLoadImage不同的是,cvLoadImage为图像分配内存空间, 而cvQueryFrame使用已经在
CvCapture结构中分配好的内存。这样的话,就没有必要通过释放cvReleaseImage()对这个返回的图像指针进行释放,
当CvCapture结构被释放以后,每一帧图像所对应的内存空间即会被释放。
*/
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "Example2", frame );
//下两行代码是手动控制退出
char c = cvWaitKey(330);
if( c == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Example2" );
}
/*
cvNamedWindow();函数时一个高层调用函数,该函数由HighGUI库提供。用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。
函数的第一个参数制定了该窗口的标题("Example1"),如果要使用HighGUI库所提供的其他函数与该窗口进行交互时,我们将通过
该参数引用这个窗口。
cvNamedWindow()第二个参数定义了窗口的属性。该参数可以被设置为CV_WINDOW_AUTOSIZE或者0.设置为0是,窗口的大小不会因图
像的大小而改变,图像只能在窗口中根据窗口的大小而进行拉伸或缩放。而设置为CV_WINDOW_AUTOSIZE时,窗口则会根据图像的
实际大小进行自动拉伸或缩放。以容纳图像。
注:关于命令行参数,argv[1]可以通过项目→属性→调试→命令行参数进行设置。也可以通过快捷键Alt+F7。
*/