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

问题描述 投票:0回答:14

我收到此错误

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

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

c# emgucv
14个回答
16
投票

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

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

根据emgu wiki


10
投票

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

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

6
投票

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


6
投票

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


2
投票

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

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


2
投票

首先您必须将三个库添加到您的项目中。 opencv_core290.dll、opencv_highgui290.dll、opencv_imgproc290.dll。这里的290指的是你的opencv版本。之后将其属性“不复制”更改为“始终复制”。而不是保存您的项目。之后前往以下位置。如果您的计算机是 64 位,则转到以下文件夹“C:\Emgu mgucv-windows-universal-cuda 2.9.0.1922 in\x64”,或者如果您使用 32 位操作系统,则转到“C:\Emgu mgucv- windows-universal-cuda 2.9.0.1922 in\x86" 并复制该文件夹中的所有 dll,并将其粘贴到您的 Project/bin/debug/ 文件夹中。而不是重建你的项目。这样就可以正常工作了。

祝你好运!!!!


2
投票

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

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


1
投票

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


0
投票

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

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

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


0
投票

你可以使用

LD_LIBRARY_PATH
来解决它:

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

  2. 找到路径

    $locate #查找库路径

  3. 在你的IDE中,将环境变量

    LD_LIBRARY_PATH
    设置为lib路径,(我使用monodevelop,路径是Run-->Run With-->CustomParameter...)

现在效果很好:)


0
投票

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

您可以查看帖子


0
投票

我在生产机器上有同样的错误,在开发机器上没有问题,dll 位于同一文件夹中。


0
投票

对我来说,安装 Windows Visual C++ 2010 后问题已修复


-1
投票

just change the build setting from any CPU to x86 or x64 and this will work.

© www.soinside.com 2019 - 2024. All rights reserved.