2012-09-14 57 views
5

難道是在OpenCV2.4 highgui中有一個錯誤,用於捕獲窗口中的視頻幀?OpenCV2.4從視頻中捕獲幀的可能的錯誤

我安裝了預編譯庫,由我編譯後的,我可以完全編譯一切,如果

它們是基於圖像,我可以運行我的程序。該問題僅適用於視頻。 OpenCV的崩潰在此函數總是:

virtual IplImage* retrieveFrame(int) 
    { 
     unsigned char* data = 0; 
     int step=0, width=0, height=0, cn=0; 

     if(!ffmpegCapture || 
      !icvRetrieveFrame_FFMPEG_p(ffmpegCapture,&data,&step,&width,&height,&cn)) <-------CRASHES HERE 
      return 0; 
     cvInitImageHeader(&frame, cvSize(width, height), 8, cn); 
     cvSetData(&frame, data, step); 
     return &frame; 
    } 

這是類cap_ffmpeg.cpp內,由VideoCapture調用。

我試過版本2.4.2和2.4.9。我programes正在努力FINDE與opencv2


更多信息

  • 的Windows 7

  • 建立與C進行項目(重要的,因爲這可能是因爲CMake的不是建築/發現正確的編解碼器)

  • VisualStudio 9 2008

  • 的OpenCV 2.4.2

編輯

它看起來像它實際上是一個bug,所以,我怎麼能解決這個問題,改變我的代碼,以便能夠讀取AVI文件?

+2

爲什麼不呢?它是軟件:)看起來像你描述的問題http://code.opencv.org/issues/2115 –

+0

@Sergey呵呵,是的,我相信它,但它是一種痛苦。我需要開發,現在我必須與這...耐心 –

+0

根據描述你需要降級2.4-> 2.1或只是自己修復它,併發布你的補丁,以幫助其他人:)根據我的知識,這是不好的在Windows上使用ffmpeg的想法。 AFAIR它應該是OpenCV的DirectDraw捕獲,但也許我錯了。 –

回答

5

作爲一個臨時解決方案,我決定對視頻進行重新編碼,使OpenCV不使用ffmpeg。我用VirtualDubmicrosoft video 1壓縮,它使用「msvidc32.dll」驅動程序。

它適用於我所有的視頻,所以現在已經足夠了,因爲我可以繼續在Windows中使用OpenCV。

enter image description here

1

如果您使用的是x64。請使用opencv_ffmpeg245_64.dll解決這個問題。或者將opencv_ffmpeg245_64.dll重命名爲opencv_ffmpeg245.dll可能會解決問題。