19

我收到此错误

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

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

4

11 回答 11

16

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

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

根据emgu wiki

于 2014-11-03T10:15:48.980 回答
9

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

  1. 确保您的 .NET 项目针对的是 x86 而不是 AnyCPU,因为您可能拥有 OpenCV 的 x86 版本。
  2. 确保 OpenCV dll 在您的 PATH 中(或直接在 bin 目录中,如果这是 Console/WinForms/WPF 应用程序。)
于 2013-06-24T12:07:40.197 回答
5

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

于 2014-02-18T11:40:13.837 回答
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 并将其粘贴到您的 Project/bin/debug/ 文件夹中。而不是重建你的项目。比它会正常工作。

祝你好运!!!!

于 2014-12-16T13:29:08.770 回答
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

于 2014-08-18T12:03:49.520 回答
2

在 c#,VS 2017,emgu 版本 3.2.0.2682 上找到了这个

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

于 2017-07-15T19:28:03.593 回答
2

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

于 2020-07-11T22:37:42.370 回答
1

我在我的 32 位机器上遇到了同样的问题 3 天。我通过简单地将所有 dll 从 bin 和 x86 文件夹复制到 system32 文件夹中解决了这个问题,它可以工作。看起来有些 dll 依赖于其他 dll,而当您传输所有这些 dll 时,它就可以工作了。我没有时间找出是哪一个。

于 2015-08-06T06:17:00.140 回答
0

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

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

这一定是emgu(可能是x86)和我的OS x64)的问题。

于 2016-10-12T20:41:42.523 回答
0

你可以用LD_LIBRARY_PATH它来解决它:

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

  2. 定位路径

    $ locate # 查找库路径

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

现在效果很好:)

于 2017-10-16T02:21:42.873 回答
0

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

你可以查看帖子

于 2018-09-20T07:27:52.253 回答