2013-10-25 37 views
0

我正在從EmguCV交換到OpenCV,這樣我就可以嘗試一些尚未被EmguCV包裝的OpenCV函數。不過,我無法加載我的簡單測試視頻文件,該文件在EmguCV中沒有問題。看看EmguCV源代碼,我注意到他們調用OpenCV C函數而不是C++來初始化文件(或網絡攝像機)的捕獲,所以我寫了下面的測試代碼(在this answer的幫助下)。這是我簡單的代碼爲什麼視頻文件不能在OpenCV中打開(包括C&C++ API)?

int _tmain() 
{ 
    string filename = "sample.wmv"; 
    if (!FileExists(filename.c_str)) 
    { 
     cout << "File does not exist" << endl; 
     return -1; 
    } 
    else 
    { 
     cout << "File exists" << endl; 
     VideoCapture cap (filename); 
     if(!cap.isOpened()) 
     { 
      cout << "Failed to open file in OpenCV C++" << endl; 
      //Trying C API too just-in-case 
      CvCapture* capture = cvCreateFileCapture(filename.c_str()); 
      if (!capture) 
      { 
       cout << "Failed to open file in OpenCV C" << endl; 
      } 
      else 
      { 
       //Grab frames and do stuff 
       cvReleaseCapture(&capture); 
      } 
      return -1; 
     } 
     else 
     { 
      //Grab frames and do stuff 
     } 
    } 
    return 0; 
} 

當我運行此我得到的輸出

File exists 
Failed to open file in OpenCV C++ 
Failed to open file in OpenCV C 

這種情況無論文件,即它發生在「sample.wmv」,「SAMPLE.AVI」甚至還有一個OpenCV示例文件「tree.avi」。

爲什麼?到底是怎麼回事?

(我在Windows 8和Windows 8.1中機中運行的OpenCV 2.4.6。)

+0

你對你的系統有必要的權限嗎?你可以用opencv打開任何東西(例如圖像或XML文件等)嗎? – alrikai

+0

是的 - jpeg打開罰款。另外EmguCV項目成功地打開了相同的視頻文件。 – dumbledad

+0

你有樣品嗎?我可以爲你嘗試它,然後我會讓你知道它是否正常工作。 – Mzk

回答

3

看來,根據@ tobias-senst在another answer的建議,我需要在本地機器上構建OpenCV,而不是依賴標準分發提供的DLL。讓OpenCV在本地構建令人頭疼(請參閱here,herehere),但現在我引用了構建在此機器上的OpenCV 2.4.6副本,我可以打開視頻文件。

我不知道爲什麼這會起作用,爲什麼它沒有在要求中提到,爲什麼其他人不會更頻繁地出現這個問題,也不知道什麼是默認部署失敗,但至少我已經修復了。

1

umm..if emgu和你的項目使用相同的版本,只複製emgu的OpenCV的dll文件(和所有其他DLL)到您的文件夾..可能會工作。

爲什麼這可能是因爲opencv不是用ffmpeg構建的一個原因(or you are missing them in your folder, just copy them over then it also might start to work)。 opencv依靠ffmpeg來做幾乎所有的解碼。 opencv ffmpeg/s可能是在發佈模式下構建的,所以如果你的項目處於調試模式,它可能也不會工作。

+0

謝謝@ zaw-lin交換到EmguCV附帶的OpenCV DLL是一個不錯的主意,但是當我從EmguCV交換到OpenCV時,我想使用最新版本,或者至少明白爲什麼我不能。我想你可能對ffmpeg DLL是正確的,儘管我已經將它們(調試和發佈)複製到目錄中。我已經意識到我需要在本地構建DLL(或可能只有ffmpeg),並且[修復了它](http://stackoverflow.com/a/19635301/575530)。 – dumbledad

相關問題