GUI接口的制作-打开AVI文件
AVI文件制作完了,接着就是将制作出来的AVI文件作播放的动作啦.播放AVI文件的程序代码如下:
#include <highgui.h>
#include <stdio.h>
int main ( )
{
CvCapture *capture;
IplImage *frame;
char AviFileName [ ]= "Output.avi";
capture = cvCaptureFromAVI (AviFileName );
cvNamedWindow ( "AVI player", 0 );
while ( true )
{
if (cvGrabFrame (capture ) )
{
frame=cvRetrieveFrame (capture );
cvShowImage ( "AVI player",frame );
if (cvWaitKey ( 10 )>= 0 ) break;
}
else
{
break;
}
}
cvReleaseCapture (&capture );
cvDestroyWindow ( "AVI player" );
}
执行结果:
用 cvCaptureFromAVI()播放AVI的文件,再开个窗口接口show出来,就是这么简单,其中cvGrabFrame()跟cvRetrieveFrame()其实就是cvQueryFrame()的组合,直接用cvQueryFrame()也行,在这里,当文件播放完的时候 cvGrabFrame()会自动返回0而while循环就会被break,如果没播放完就会返回1,而它就会继续执行播放相关的动作,当在GUI接口按任意键,就会跳出while循环而结束播放.再将数据结构的內存清空.
cvCaptureFromAVI()
这边是用来播放AVI相关文件,不过,它被OpenCV定义为
#define cvCaptureFromAVI cvCaptureFromFile
#define cvCaptureFromFile cvCreateFileCapture
所以用cvCaptureFromAVI()跟cvCaptureFromFile(),cvCreateFileCapture()其实都是一样的东西.这边其实扩展名不限avi档,只要文件格式符合OpenCV播放程序内建格式的标准就行
cvCaptureFromAVI("AVI文件名称");
cvGrabFrame()
将capture抓下来的图片放在OpenCV的高速缓存中,OpenCV描述是说用他们专用的压缩格式放在它们的高速缓存中.同样的,cvQueryFrame()也是相同的步骤,cvGrabFrame()返回的数值是0跟1,0是失败,1是成功.
int cvGrabFrame(CvCapture数据结构);
cvRetrieveFrame()
从高速缓存中撷取Frame,并配置给IplImage数据结构.这边cvQueryFrame()=cvGrabFrame()+cvRetrieveFrame().
cvRetrieveFrame(CvCapture数据结构);