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資料結構);
7 意見:
你好,我用cvCaptureFromAVI()怎么打不开avi文件呢?
有可能是檔案格式的問題喔...
如果是用OpenCV內部提供的AVI檔錄製應該是沒有這個問題
之前我用網路上的flv檔播放也是會失敗..
hi,打不开avi文件,主要和解码器有关,可从http://www.xvidmovies.com/codec/ 下载XviD codec,并安装。然后就可以用cvCreateFileCapture打开XviD编码的视频文件
謝謝您^^
先進您好:
拜讀您的OPENCV網站讓我受益良多,也激起我深入鑽研的熱情。在此想請教您一些關於此演算法程式的相關細節:
1.請問在讀取AVI檔案後,要做兩張畫面相減,但是我該怎做呢能否告知?我不知道如何在影片裡抓取我要的圖片來存檔和相減。是要用到哪些指令呢?OPENCV英文版的是用這些指令,但是我還沒做出來。
Frame Differencing: cvAbsDiff(
frameTime1,
frameTime2,
frameForeground
);
大大您好,向您請教問題,我播放AVI文件的時候,都會在還沒有播放完的時候就程式就自動結束,而跳出的時間隨影片的尺寸而異,無論原始影片有多長,720*480的影片大概播放到半分鐘會自動結束,320*240的影片大概播放兩分半鐘就會自動結束,請問這是哪裡的問題呢? 十分感謝。
謝謝你的文章 讓我受益良多
想請問你
OpenCV播放程式內建格式
要怎麼查
因為我想知道它還能開啟哪些檔案
謝謝
張貼留言