2012-09-22 99 views
2

我想寫一個視頻處理應用程序使用OpenCV 2.4.2(在Windows 7上的Visual C++ 2010 Express),但我有麻煩顯示某些AVI文件。大多數顯示正確,但是當我使用I420格式編碼的AVI文件時,我得到的每一幀都是條紋粉紅色圖像(它在正規媒體播放器中正確顯示)。OpenCV顯示AVI文件編碼I420

輸出顯示:http://i.imgur.com/BOu6c.png?1

目前,我使用的是C++ API,但是當我使用C API(代碼從該頁面:http://nashruddin.com/how_to_play_avi_files_with_opencv)同樣的事情發生。我覺得這很奇怪,因爲在本網站和網絡上的大多數答案中,他們明確推薦使用I420編碼。有誰知道什麼可能導致這個或如何解決它?

這裏是我使用的代碼的下調版本:

int main(int argc, char** argv){ 
string fname = "test.avi"; 
VideoCapture capture(fname); 
if(!capture.isOpened()){ 
    cerr << "error opening " << fname << endl; 
    return -1; 
} 

Mat frame; 
namedWindow("output"); 
double rate = capture.get(CV_CAP_PROP_FPS); 
int delay = 1000/rate; 
while(true){ 
    if(!capture.read(frame)) break; 
    cv::imshow("output", frame); 
    if(waitKey(delay) >= 0) break; 
} 
capture.release(); 

return 0; 
} 

我使用的是OpenCV中的預編譯的版本,如果有差別(http://sourceforge.net/projects/opencvlibrary /)。

+2

您是否更新過系統編解碼器?錯誤的編解碼器可能會導致這種情況。 – karlphillip

+0

我剛安裝了k-lite mega codec pack,它仍然在發生。 – jlh752

+0

什麼是「延遲」值? – karlphillip

回答

0

好吧,所以我設法測試了幾臺電腦。一個剛剛墜毀,另一個視頻播放正常。事實證明,FFMPEG在默認的OpenCV編譯中啓用時存在與未壓縮的AVI相關的問題。重新編譯禁用FFMPEG的OpenCV,或者只是使用其他編解碼器來壓縮視頻。