C# '的类型初始值设定项;Emgu.CV.CV';抛出异常

C# '的类型初始值设定项;Emgu.CV.CV';抛出异常,c#,emgucv,C#,Emgucv,我犯了这个错误 “Emgu.CV.CvInvoke”的类型初始值设定项引发异常 当我尝试使用Emgu CV时。我已经尝试了所有我能想到的方法来解决这个问题,但它仍然会给出相同的错误,当我点击一个按钮时,它会显示出来 对象引用未设置为对象的实例 这是我正在尝试的代码: void ProcessFunction(object sender, EventArgs e) { imgOrg = capturecam.QueryFrame(); if (imgOrg == null) ret

我犯了这个错误

“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;
}

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

它可能无法加载非托管DLL依赖项。有几点建议:

  • 确保您的.NET项目的目标是x86而不是任何CPU,因为您可能拥有OpenCV的x86版本
  • 确保OpenCV DLL位于您的路径中(如果这是Console/WinForms/WPF应用程序,则直接位于bin目录中)

  • 将EMGU安装的bin文件夹中的所有非托管DLL复制并粘贴到exe文件所在的位置(项目文件夹的Release或Debug文件夹)

    在我的例子中,非托管dll位于“C:\Emgu\emgucv windows universal cuda 2.9.0.1922\bin\x86”

    您应该将依赖项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

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

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


    根据

    的规定,首先您必须向项目中添加三个库。 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并将其粘贴到项目/bin/debug/文件夹中。而不是重建你的项目。这样就行了


    祝你好运

    我在我的32位机器上连续3天出现同样的问题。我通过简单地将所有DLL从bin和x86文件夹复制到system32文件夹中解决了这个问题,并且成功了。看起来有一些DLL依赖于其他DLL,并且在您传输所有DLL的那一刻就可以正常工作。我没有时间找出哪一个。

    对于我来说,通过在Visual Studio中单击解决了问题:

    菜单->项目->属性->构建->首选32位

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

    在c#上发现的,与2017年的emgu版本3.2.0.2682相比

    尝试在AnyCPU上进行简单构建,但收到错误格式异常。
    所以我尝试了x86坏格式异常,因为评论中可能有建议。最后,我把它设为x64,它工作得很好。

    您可以使用
    LD\u LIBRARY\u PATH
    来解决它:

  • 打开警告并检查程序缺少的lib

  • 找到路径

    $locate#查找库路径

  • 在IDE中,将环境变量
    LD_LIBRARY_PATH
    设置为lib路径(我使用monodevelop,路径为Run-->使用-->自定义参数运行…)


  • 它现在可以正常工作了:)

    如果它在Windows Server上无法工作,则必须启用UI桌面体验


    安装此nuget:解决了我的问题,看起来手动dll复制已通过此软件包解决。

    ya在其平台目标x86中。。我已经将opencv DLL包含到bin目录调试文件夹中,但它仍然会给出相同的错误…当抛出异常时,您可以中断调试器吗?您可能会在那里的异常详细信息中获得更多信息。我不知道如何在Visual Studio中中断调试程序:调试|异常…|公共语言运行时异常|[Checked]ThrownGuys这是我经过几个小时的尝试后唯一有效的方法!!感谢MuhammedI我知道这是一个老问题,但是如果您的操作系统是64位的,那么您应该使用EmguCV x64 DLL,如果操作系统是32位的,那么应该使用EmguCV x86 DLL。如何构建解决方案并不重要,它可以轻松构建为“任何CPU”。下载Emgu.cv的nuget和windows运行时在我的情况下,我完成了一个干净的构建,它清除了bin文件夹中的内容。重新安装还原的文件。这里是默认情况下的内容:concrt140.dll cvextern.dll msvcp140.dll opencv\u ffmpeg330\u 64.dll vcruntime140.dllI有两个文件运行时windows(x86)、vc\u redist 2005->2017(x86和x64)和.net 4.8。但有些电脑工作,有些抛出异常。你有没有遗漏什么?