我真的是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
答案 0 :(得分:22)
在经历了同样的问题一段时间后,我发现解决此问题的说明(TypeInitializer Exception)不完整。
对于基本应用,您需要在.EXE目录中cvextern.dll, Emgu.CV.dll, Emgu.CV.UI.dll, Emgu.Util.dll
。
您需要在.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.dll
和cudart32_42_9.dll, npp32_42_9.dll, opencv_flann240.dll
只要包含所有必需的DLL,该应用就会正常运行。
答案 1 :(得分:5)
我正在使用Emgu 3.0 64位,我唯一需要做的就是将项目中的构建类型更改为x64。
右键点击项目名称 - > 属性 - > 构建 - > 平台目标 - >的 64 强>
参考http://www.codeproject.com/Articles/257502/Creating-Your-First-EMGU-Image-Processing-Project
希望它对某人有所帮助。
答案 2 :(得分:1)
发生在我身上的另一个案例是我有一个NuGet包已经安装但没有为我的项目加载所以引用看起来很好但是在运行时,我得到了TypeInitializationException。
-manage NuGet包
- 在包上管理
- 选中当前项目的框。
答案 3 :(得分:1)
如果您使用的是使用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
答案 4 :(得分:0)
如果您使用的是64位操作系统,只需从x64文件夹中复制 cvextern.dll 文件,然后将其复制到项目的 debug 文件夹中。
注意:请手动执行,因为"添加现有项目" 不会复制它。