Внедрение EmguCV TypeInitializationException

Я действительно новичок с 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();

        }
    }
}

Я получаю следующую ошибку:

enter image description here

i проверить и иметь всю необходимую DLL в папке .exe

Ответ 1

После такой же проблемы некоторое время я нашел инструкции для решения этой проблемы (Исключение TypeInitializer) являются неполными.

  • Для базового приложения вам понадобится cvextern.dll, Emgu.CV.dll, Emgu.CV.UI.dll, Emgu.Util.dll в каталоге .EXE.

  • Вам нужен x86 (x64) dir в каталоге .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.dll и cudart32_42_9.dll, npp32_42_9.dll, opencv_flann240.dll

Приложение будет работать, как только вы включите все необходимые библиотеки DLL.

Ответ 2

Я использую Emgu 3.0 64 бит, и единственное, что мне нужно сделать, чтобы исправить эту проблему, - это изменить тип сборки в моем проекте на x64.

Щелкните правой кнопкой мыши по имени проекта Свойства Построить Цель платформы 64

обратитесь к http://www.codeproject.com/Articles/257502/Creating-Your-First-EMGU-Image-Processing-Project

надеюсь, что это поможет кому-то.

Ответ 3

Другим случаем, который произошел со мной, было то, что у меня был пакет NuGet, который был установлен, но не загружен для моего проекта, поэтому ссылки выглядели хорошо, но во время выполнения я получил исключение TypeInitializationException.

-manage пакеты NuGet

-clock управлять пакетом

- установите флажок с текущим проектом.

Ответ 4

Эта проблема также возникает, если вы используете OpenCV DLL, скомпилированную с поддержкой GPU, но на вашем ПК нет GPU, например. если вы используете портативный компьютер с графическим чипсетом Intel.

В этом случае вы можете использовать более раннюю версию 2.4.0, которая по-прежнему предлагает DLL без поддержки графического процессора:

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

Ответ 5

Просто скопируйте файл cvextern.dll из папки x64, если вы используете 64-битную ОС, а затем скопируйте его в папку отладки вашего проекта.

Примечание: сделайте это вручную, потому что "добавить существующий элемент" не копирует его.