分享

在pcDuino上学习OpenCV系列教程(三)播放avi文件

 xiaofenglib 2014-03-17

这里我们还是通过前面的方法创建一个命名窗口,在“例2”中,事情变得更加有趣了。

CvCapture* capture = cvCreateFileCapture( argv[1] );

函数cvCreateFileCapture()通过参数设置确定要读入的AVI文件,返回一个指向CvCapture结构的指针。这个结构包括了所有关于要读入AVI文件的信息,其中包含状态信息。在调用这个函数后,返回指针所指向的CvCapture结构被初始化到所对应AVI文件的开头。

frame = cvQueryFrame( capture );

一旦进入while(1)循环,我们便开始读入AVI文件,cvQueryFrame的参数为CvCapture结构的指针。用来将下一帧视频文件载入内存(实际是填充或更新CvCapture结构中)。返回一个对应当前帧的指针。与cvLoadImage不同的是,cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在cvCapture结构中分配好的内存。这样的话,就没有必要通过cvReleaseImage()对这个返回的图像指针进行释放,当CvCapture结构被释放后,每一帧图像所对应的内存空间即会被释放。

c = cvWaitKey(33);

if( c == 27 ) break;

当前帧被显示后,我们会等待33 ms。[2][11]如果其间用户触发了一个按键,c会被设置成这个按键的ASCII码,否则,c会被设置成-1。如果用户触发了ESC键(ASCII 27),循环被退出,读入视频停止。否则33 ms以后继续执行循环。

需要指出的是,在这个简单的例子程序中,我们没有使用任何准确的方法来控制视频帧率。我们只是简单的通过cvWaitKey来以固定时间间隔载入帧图像,在一个精度要求更高的程序中,通过从CvCapture结构体中读取实际帧率是一个更好的方法!

cvReleaseCapture( &capture );

退出循环体(视频文件已经读入结束或者用户触发了Esc键)后,我们应该释放为CvCapture结构开辟的内存空间,这同时也会关闭所有打开的AVI文件相关的文件句柄。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多