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

本文关键字:CvInvoke CV 异常 Emgu 类型 | 更新日期: 2023-09-27 18:19:44

我收到这个错误

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

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

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

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

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

根据emgu wiki

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

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

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

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

在我的项目中添加:opencv_core290.dll、opencv_higigui290.dll、opencv_ffmpeg290.dll、opencv_imageproc290.dll和cudart32_5.dll

首先,您必须向项目中添加三个库。opencv_core290.dll、opencv_higigui290.dll、opencv_imgproc290.dll。此处290表示您的opencv版本。之后,他们的属性"请勿复制"更改为"始终复制"。而不是保存您的项目。然后去下面的地方。如果您的机器是64位的,请转到以下文件夹"C:''Emgu''emgucv windows universal cuda 2.9.0.1922''bin''x64",或者如果您使用的是32位操作系统,请转到"C:''Emgu''emgupv windows universal-cuda 2.9..1922''bin''x86"并复制该文件夹中的所有dll,然后将其粘贴到您的项目/bin/debug/文件夹中。而不是重建你的项目。然后它会很好地工作。

祝你好运!!!!

在c#,VS 2017,emgu版本3.2.0.2682 上发现了这一点

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

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

我的32位机器出现了同样的问题,持续了3天。我只是简单地将所有dll从bin和x86文件夹复制到system32文件夹中,就解决了这个问题,并且成功了。看起来有些dll依赖于其他dll,当你转移所有dll时,它就起作用了。我没有时间弄清楚是哪一个。

For me问题通过在Visual Studio中单击解决

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

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

您可以使用LD_LIBRARY_PATH来解决它:

  1. 打开警告并检查程序缺少的库

  2. 定位路径

    $locate#查找库路径

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

它的工作现在退出良好:)

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

您可以查看后

我在生产机器中遇到了同样的错误,在开发机器中没有问题,dll在同一个文件夹中。

只需将构建设置从任何CPU更改为x86或x64即可。