【发布时间】: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 中。如果您需要更多信息,请告诉我。