Внедрение 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-битную ОС, а затем скопируйте его в папку отладки вашего проекта.
Примечание: сделайте это вручную, потому что "добавить существующий элемент" не копирует его.