2012-03-04 26 views
0

我試圖用emguCV打開一個mpg文件。我使用下面的代碼:無法使用EmguCV打開一個mpg文件與C#

if (instance == null) 
    { 
     lock (m_lock) 
     { 
      try 
      { 
       instance = new Capture(0); // capture from camera works fine if a camera is connected 
      } 
      catch (NullReferenceException) 
      { 
       String sFileName = @"C:\tmp\MarkerMovie.mpg"; 


       try 
       { 
        if (File.Exists(sFileName)) 
        { 
         instance = new Capture(sFileName); // here the exception is thrown 
        } 
        else 
        { 
         MessageBox.Show("No Camera and no Video-File found"); 
        } 
       } 
       catch (NullReferenceException) 
       { 
        MessageBox.Show("Couldn't open Video: "+sFileName); 
       } 
      } 
     } 
    } 

如果一個攝像頭連接一切正常,但是當我拔掉攝像頭的線instance = new Capture(sFileName);拋出一個NullReferenceException:

消息=「無法從C創建捕獲:\ tmp \ MarkerMovie.mpg「

我調試過,發現原因是在capture的構造函數中。下面的命令總是返回一個空指針:

_ptr = CvInvoke.cvCreateFileCapture(fileName); 

我可以用C++使用此代碼打開同樣的視頻:

cap = cvCaptureFromFile("C:\\tmp\\MarkerMovie.mpg"); 

我是新來的OpenCV,所以我不知道哪你需要幫助我的信息。我在Windows XP計算機上從http://sourceforge.net/projects/emgucv/昨天安裝了emguCV。安裝程序的版本是x86_2.3.0.1416。我包含opencv_core231.dll,opencv_highgui231.dll和opencv_imgproc231.dll到我的項目。

有人知道如何讓這段代碼工作嗎? 讓我知道你是否需要更多信息。

謝謝。

+0

嗨Steckl,我看不到任何東西你的代碼錯誤,我傾向於使用openfiledialog來防止任何空的異常,只留下編解碼器問題,但你的錯誤是奇怪的。首先嚐試使用Openfiledialog並將程序直接指向文件。如果仍然出現錯誤,您是否可以使用視頻上傳項目或更簡單的版本,以便重新創建錯誤並查看是否可以直接調試問題。乾杯 – Chris 2012-03-05 09:37:28

+0

嗨克里斯,謝謝你的回覆。我嘗試使用OpenFileDialog,但沒有任何成功。我上傳了該項目到[鏈接](http://db.tt/bUwxRCMQ)。 。 Zip文件包含項目和視頻。我剛剛上傳了項目的所有文件(不知道哪些與運行相關)。我發佈的代碼在文件VideoStream.cs中。如果您需要更多信息,請與我們聯繫。 – steckl 2012-03-05 15:32:59

回答

5

我有同樣的問題,並將opencv_ffmpeg.dll添加到項目似乎解決它。 (在Emgu CV目錄的bin目錄中找到)我已經在你發佈的項目上試過了,它似乎也在工作。希望能幫助到你。

+0

感謝您的回答。我還沒有時間來測試你的解決方案,但如果它有效,我會告訴你。 – steckl 2012-05-06 10:52:47

+0

今天我有時間嘗試它,它的工作原理非常完美。非常感謝您的回答! :-) – steckl 2012-05-08 20:01:55

0

隨着EmguCV在C#中,你需要把opencv_ffmpeg.dll,例如:opencv_ffmpeg2410.dll,要小心,如果你有86或64位