'Emgu.CV.CvInvoke'的类型初始值设定项引发了异常

时间:2013-06-24 11:28:02

标签: c# emgucv

我收到此错误

  

'Emgu.CV.CvInvoke'的类型初始值设定项引发异常。

当我尝试使用Emgu CV时。我已经尝试了所有我能想到的东西来解决这个问题,但它仍然会给出相同的错误,当我点击一个按钮时它会显示

  

对象引用未设置为对象的实例。

这是我正在尝试的代码:

void ProcessFunction(object sender, EventArgs e)
{
    imgOrg = capturecam.QueryFrame();
    if (imgOrg == null) return;
    imgProc = imgOrg.InRange(new Bgr(50, 50, 50), new Bgr(255, 255, 255));
    imgProc = imgProc.SmoothGaussian(9);
    imageBox1.Image = imgOrg;
    imageBox2.Image = imgProc;
}

我可能做错了什么,如何进一步调试?谢谢!

11 个答案:

答案 0 :(得分:14)

我遇到了同样的问题。我的内部异常是“无法加载DLL'opencv_core290'”。

您需要将x86和x64文件夹从“yourEmguFolder / bin”复制到项目的输出(bin)目录。然后再次构建项目并运行。

根据emgu wiki

答案 1 :(得分:9)

可能无法加载非托管DLL依赖项。一些建议:

  1. 确保您的.NET项目的目标是x86而不是AnyCPU,因为您可能拥有OpenCV的x86版本。
  2. 确保OpenCV dll在您的PATH中(或直接在bin目录中,如果这是一个Console / WinForms / WPF应用程序。)

答案 2 :(得分:5)

将EMGU安装的bin文件夹中的所有非托管dll复制并粘贴到exe文件所在的位置(项目文件夹的Release或Debug文件夹)。
在我的例子中,非托管dll位于“C:\ Emgu \ emgucv-windows-universal-cuda 2.9.0.1922 \ bin \ x86”

答案 3 :(得分:2)

您应该将依赖项dll添加到项目中,并将“复制到输出目录”属性更改为“始终复制”(添加 - >现有项目) 来自Emgu \ emgucv-windows-universal-cuda 2.9.0.1922 \ bin \ x86

在我的项目中添加:opencv_core290.dll,opencv_highgui290.dll,opencv_ffmpeg290.dll,opencv_imageproc290.dll和 cudart32_55.dll

答案 4 :(得分:2)

首先,您必须向项目添加三个库。 opencv_core290.dll,opencv_highgui290.dll,opencv_imgproc290.dll。在这里290指的是你的opencv版本。在他们的财产改变之后"不要复制"总是"复制"。比保存你的项目。之后转到以下位置。如果您的机器是64位而不是转到以下文件夹" C:\ Emgu \ emgucv-windows-universal-cuda 2.9.0.1922 \ bin \ x64"或者如果你使用32位操作系统而不是去" C:\ Emgu \ emgucv-windows-universal-cuda 2.9.0.1922 \ bin \ x86"并复制该文件夹中的所有dll并将其粘贴到Your Project / bin / debug /文件夹中。而不是重建你的项目。比它能正常工作。

祝你好运!!!!

答案 5 :(得分:1)

我在32位机器上遇到了同样的问题3天。我通过简单地将所有dll从bin和x86文件夹复制到system32文件夹中解决了这个问题。看起来有些dll依赖于其他dll并且你转移所有它的工作时刻。我没有时间找出哪一个。

答案 6 :(得分:1)

在c#,VS 2017,emgu 3.2.0.2682

上找到了这个

在AnyCPU上尝试了一个简单的构建,并收到了错误的格式异常。 所以我尝试了x86格式异常,因为评论中可能存在建议。最后我把它作为x64,它工作正常。

答案 7 :(得分:1)

安装此nuget:https://www.nuget.org/packages/Emgu.CV.runtime.windows/解决了我的问题,看起来手动dll复制已由该软件包解决。

答案 8 :(得分:0)

对我来说,单击Visual Studio解决了问题:

菜单 - >项目 - >属性 - >构建 - >喜欢32位。

一定是emgu(可能是x86)和我的操作系统x64的问题。

答案 9 :(得分:0)

您可以使用LD_LIBRARY_PATH来解决它:

  1. 打开警告并检查您的程序缺少哪些lib

  2. 找到路径

    $ locate#查找库路径

  3. 在IDE中,将环境变量LD_LIBRARY_PATH设置为lib路径,(我使用monodevelop,路径为Run - &gt; Run With - &gt; Custom Parameters ...)< / p>

  4. 它的工作现在好了:)

答案 10 :(得分:0)

如果它在Windows Server上不起作用,则必须启用UI桌面体验。

you can view the post