EmguCV TypeInitializationException

我真的是EgmuCV的新手

我尝试使用以下代码从网络摄像头捕获图像:

//Program.cs (Winform) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.UI; using Emgu.Util; using Emgu.CV.Structure; namespace EgmuCVTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Capture cp = new Capture(); ImageViewer imv = new ImageViewer(); Application.Idle += new EventHandler(delegate(object s, EventArgs ea) { imv.Image = cp.QueryFrame(); }); imv.ShowDialog(); } } } 

我得到以下错误:

在此处输入图像描述

我检查并在.exe文件夹中包含所有必要的DLL

在经历了同样的问题一段时间后,我发现解决此问题的指令( TypeInitializerexception )是不完整的。

  1. 对于基本应用程序,您需要.EXE目录中的cvextern.dll, Emgu.CV.dll, Emgu.CV.UI.dll, Emgu.Util.dll

  2. 您需要.exe目录中的x86(x64)目录和“x86”目录内需要opencv_calib3dXXX.dll, opencv_contribXXX.dll, opencv_coreXXX.dll, opencv_features2dXXX.dll, opencv_highguiXXX.dll, opencv_imgprocXXX.dll, opencv_legacyXXX.dll, opencv_mlXXX.dll, opencv_objectdetectXXX.dll, opencv_videoXXX.dllcudart32_42_9.dll, npp32_42_9.dll, opencv_flann240.dll

一旦包含所有必需的DLL,该应用程序将立即生效。

我正在使用Emgu 3.0 64位,我唯一需要做的就是修复这个问题,将我项目中的构建类型更改为x64。

右键单击项目名称 – > 属性 – > 构建 – > 平台目标 – > x64

参考http://www.codeproject.com/Articles/257502/Creating-Your-First-EMGU-Image-Processing-Project

希望它可以帮助某人。

发生在我身上的另一个案例是我有一个已安装但未加载到我的项目的NuGet包,因此引用看起来不错,但在运行时,我得到了TypeInitializationException。

-manage NuGet包

– 包管理

– 选中当前项目的框。

如果您使用由GPU支持编译的OpenCV DLL但您的PC没有GPU,例如,如果您使用的是带有Intel图形芯片组的便携式计算机,也会出现此问题。

在这种情况下,您可以使用旧版本2.4.0仍然提供没有GPU支持的DLL:

https://sourceforge.net/projects/emgucv/files/emgucv/2.4.0/libemgucv-windows-x64-2.4.0.1717.zip

如果您使用的是64位操作系统,请从x64文件夹中复制cvextern.dll文件,然后将其复制到项目的调试文件夹中。

注意:请手动执行,因为“添加现有项目”不会复制它。