EmguCV TypeInitializationException

14

我是一个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();

        }
    }
}

我遇到以下错误:

输入图像说明

我已检查并确认所有必要的dll文件都在.exe文件夹中。

6个回答

23

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

  1. 对于一个基本应用程序,您需要将cvextern.dll,Emgu.CV.dll,Emgu.CV.UI.dll,Emgu.Util.dll放置于.exe文件的目录下。

  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,该应用程序就可以正常工作。


3
对于我来说,只需要从 C:\Emgu\emgucv-windows-universal 3.0.0.2157\bin\x86 复制 cvextern.dll...\Visual Studio 2013\Projects\ScreenAnalyzer\TestProject\bin\Debug 目录下即可消除异常。 - Alexander Taubenkorb
对我而言,在多项目解决方案中通过包管理器引入Emgu的问题得到了解决,方法是调整引用Emgu的子项目的构建输出路径为启动项目(在VS 2017中)的输出路径(因此也是执行路径)。 - lars k.

5

三天的头痛终于解决了。在VS 2013 Express中,我只需在平台目标中取消“优先使用32位”选项,它就突然开始工作了。很让人恼火的是,“优先”选项竟然会引起这样的问题。非常感谢您。 - Peter Webb

1
另一个发生在我身上的情况是,我安装了一个NuGet包,但没有为我的项目加载,因此引用看起来很好,但在运行时,我得到了TypeInitializationException。
-管理NuGet包 -在包上管理时钟 -选中当前项目的框。

1

你好,能否请您描述一下如何使用emgucv 2.4版本?我在您推荐的软件包中找不到dll文件。谢谢! - titech
DLL文件位于链接的ZIP文件中,分别在32位和64位的文件夹“bin/”和“bin/x64/”中。最简单的方法是将它们全部链接到您的项目中,这样您就可以访问最初问题中提到的“Capture”和“ImageViewer”对象了。 - Jack Miller

0

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

注意:请手动执行此操作,因为"添加现有项"不会复制它。


0

我正在使用Emgu.CV 4.4.0.4099,并遇到了相同的异常。以下是我采取的步骤来解决它。

  1. 将cvextern.dll复制到输出目录。
  2. 安装Emgu.CV.runtime.windows nuget包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接