C# EmguCV类型初始化异常

C# EmguCV类型初始化异常,c#,emgucv,C#,Emgucv,我真的是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 E

我真的是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,并将其保存在该文件夹中。在遇到相同的问题一段时间后,我发现解决此()问题的说明不完整

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

  • 在.exe目录和“x86”目录中需要一个x86(x64)目录,在“x86”目录中需要
    opencv\u calib3dXXX.dll、opencv\u contribXXX.dll、opencv\u coreXXX.dll、opencv\u features2dXXX.dll、opencv\u highguiXXX.dll、opencv\u imgprocXXX.dll、opencv\u legacyXXX.dll、opencv\u mlXXX.dll、opencv\u objectdetectXXX.dll、opencv\u videoXXX.dll、opencv\u videoXXX.dll
    cu32\u 42\u 9.dll,npp32_42_9.dll,opencv_flann240.dll


  • 只要您包含所有必需的DLL,应用程序就会工作。

    另一个发生在我身上的情况是,我安装了一个NuGet软件包,但没有为我的项目加载该软件包,因此引用看起来不错,但在运行时,我遇到了TypeInitializationException

    -管理NuGet包

    -包装上的时钟管理


    -选中当前项目的复选框。

    我正在使用Emgu 3.0 64位,要解决此问题,唯一需要做的就是将项目中的生成类型更改为x64

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


    希望它对其他人有所帮助。

    如果您使用的是使用GPU支持编译的OpenCV DLL,但您的电脑没有GPU,例如,如果您使用的是带有英特尔图形芯片组的便携式计算机,则也会出现此问题

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


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


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

    对于我来说,只要将cvextern.dll从
    C:\Emgu\emgucv windows universal 3.0.0.2157\bin\x86
    复制到
    ..\Visual Studio 2013\Projects\ScreenAnalyzer\TestProject\bin\Debug
    就可以解决异常。对于我来说,在多项目解决方案中通过包管理器包含Emgu,通过将引用Emgu的子项目的构建输出路径调整为启动项目(VS 2017)的输出路径(以及执行路径),解决了这个问题。您好,您能描述一下如何使用emgucv 2.4吗。。我在您推荐的软件包中找不到dll?谢谢DLL分别位于32位和64位文件夹
    bin/
    bin/x64/
    中链接的ZIP文件中。最简单的方法是,将所有这些链接到您的项目,您将能够访问初始问题中提到的对象
    Capture
    ImageViewer
    。解决了我3天的撞墙问题。在VS2013 Express中,我刚刚点击了平台目标中的“首选32位”,它突然开始工作。“首选”选项会导致这样的问题,这真是令人恼火。非常感谢。