2012-07-06 67 views
11

我真的EgmuCVEmguCV TypeInitializationException

我试图捕捉摄像头图像用下面的代码是一个新手:

//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(); 

     } 
    } 
} 

我得到了如下错误:

enter image description here

我检查并在.exe文件夹中有所有必需的dll

回答

22

经历了一段时间的同样的问题后,我发现解决这个问题的指示(TypeInitializer Exception)是不完整的。

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

  2. 你需要一个86(64)的.exe文件目录和里面的“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的。

+3

对于我来说只是复制** ** cvextern.dll从'C:\ Emgu \ emgucv-windows-universal 3.0.0.2157 \ bin \ x86'到'... \ Visual Studio 2013 \ Projects \ ScreenAnalyzer \ TestProject \ bin \ Debug'工作以除去异常。 – 2015-11-27 10:08:26

1

发生在我身上的另一种情况是,我有一个NuGet软件包已安装但未加载我的项目,所以引用看起来不错,但在运行时,我得到了TypeInitializationException。

-manage的NuGet包

- 时钟管理在包装上

-check与当前项目的复选框。

5

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

Right click on your project's name ->Properties ->Build ->Platform Target ->x64

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

希望它可以帮助别人。

+0

3天,我的头撞墙解决。在VS 2013 Express中,我刚刚点击了Platform Target中的“prefer 32 bit”,它突然开始工作。相当恼人的是,“喜欢”选项可能会导致这样的问题。谢谢非常真的。 – 2017-08-31 16:56:02

1

如果您使用OpenCV DLL与GPU支持编译但您的PC没有GPU,例如如果您使用的是带有英特尔图形芯片组的便携式计算机。

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

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

+0

你好,请你介绍一下如何使用emgucv 2.4 ..我无法在你推荐的软件包中找到dll文件?谢谢! – tipura 2017-05-31 12:37:02

+0

这些DLL分别在32位和64位的文件夹“bin /”和“bin/x64 /”中的ZIP文件中。最简单的方法是将它们全部链接到项目中,然后您就可以访问初始问题中提到的对象'Capture'和'ImageViewer'。 – 2017-08-17 05:34:13