2012-03-04 48 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位