【问题标题】:Can't open a mpg-File for capture using EmguCV with C#无法使用 EmguCV 和 C# 打开 mpg 文件进行捕获
【发布时间】:2016-07-07 00:13:20
【问题描述】:

我正在尝试使用 emguCV 打开一个 mpg 文件。我使用以下代码:

    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:

Message = "无法从 C:\tmp\MarkerMovie.mpg 创建捕获"

我调试了一下,发现原因是在捕获的构造函数中。以下命令总是返回一个空指针:

_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。

有人知道我怎样才能使这段代码正常工作吗? 如果您需要更多信息,请告诉我。

谢谢。

【问题讨论】:

  • 嗨 Steckl,我看不出你的代码有什么问题,我倾向于使用 openfiledialog 来防止任何空异常,只是让我遇到编解码器问题,但你的错误很奇怪。首先尝试打开文件对话框并将程序直接指向文件。如果您仍然收到错误,是否可以通过视频上传您的项目或更简单的版本,以便我可以重新创建错误并查看是否可以直接调试问题。干杯
  • 嗨,克里斯,感谢您的回复。我尝试使用 OpenFileDialog,但没有任何成功。我将项目上传到link。 . Zip 文件包含项目和视频。我刚刚上传了项目的所有文件(不知道哪些与运行它相关)。我发布的代码在文件 VideoStream.cs 中。如果您需要更多信息,请告诉我。

标签: c# .net opencv emgucv


【解决方案1】:

我遇到了同样的问题,将 opencv_ffmpeg.dll 添加到项目中似乎可以解决它。 (在 Emgu CV 目录的 bin 目录中找到)我已经在您发布的项目上尝试过它,它似乎也可以正常工作。希望对您有所帮助。

【讨论】:

  • 感谢您的回答。我还没有时间测试您的解决方案,但如果它有效,我会通知您。
  • 我今天有时间试了一下,效果很好。非常感谢您的回答! :-)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 2020-09-23
    • 1970-01-01
    • 2011-10-29
    • 2019-06-01
    • 2015-04-22
    相关资源
    最近更新 更多