00 GUI介面的製作-AVI檔案開啟

Post date: 2012/4/10 上午 09:18:07

AVI檔製作完了,接著就是將製作出來的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資料結構);