GUI接口的制作-打开AVI文件

风在竹林 posted @ 2009年7月13日 00:52 in OpenCV with tags OpenCV窗口接口程序设计 , 3861 阅读

AVI文件制作完了,接着就是将制作出来的AVI文件作播放的动作啦.播放AVI文件的程序代码如下:

#include <cv.h>
#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数据结构);

 

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter