我真的是 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
在遇到同样的问题一段时间后,我发现解决此问题的说明(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 后,该应用程序将立即运行。
我使用 Emgu 3.0 64 位,解决此问题唯一需要做的就是将项目中的构建类型更改为 x64。
右键单击您的项目名称 -> 属性 -> 构建 -> 平台目标 -> x64
参考http://www.codeproject.com/Articles/257502/Creating-Your-First-EMGU-Image-Processing-Project
希望它对某人有帮助。
我遇到的另一个情况是,我安装了一个 NuGet 包,但没有为我的项目加载,因此引用看起来不错,但在运行时,我收到了 TypeInitializationException。
-管理 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 文件,然后将其复制到项目的 debug 文件夹中。
注意:手动执行,因为“添加现有项目”不会复制它。
我正在使用 Emgu.CV 4.4.0.4099 并遇到相同的异常。这是我修复它所遵循的步骤。
Emgu.CV.runtime.windows
nuget 包。如果是新安装的 Windows(未安装任何其他程序),请安装 Microsoft Visual C++ 2010 x86 Redistributable。