Подтвердить что ты не робот

Инициализатор типа для "Emgu.CV.CvInvoke" бросил исключение

Я получаю эту ошибку

Инициализатор типа для "Emgu.CV.CvInvoke" сделал исключение.

когда я пытаюсь использовать Emgu CV. Я пробовал все, что мог придумать, чтобы исправить это, но он все еще дает ту же ошибку, и когда я нажимаю кнопку, он показывает

Ссылка на объект не установлена ​​в экземпляр объекта.

Это код, который я пытаюсь сделать:

void ProcessFunction(object sender, EventArgs e)
{
    imgOrg = capturecam.QueryFrame();
    if (imgOrg == null) return;
    imgProc = imgOrg.InRange(new Bgr(50, 50, 50), new Bgr(255, 255, 255));
    imgProc = imgProc.SmoothGaussian(9);
    imageBox1.Image = imgOrg;
    imageBox2.Image = imgProc;
}

Что я мог сделать неправильно и как я могу отладить это дальше? Спасибо!

4b9b3361

Ответ 1

У меня была та же проблема. Моим внутренним исключением было "Невозможно загрузить DLL" opencv_core290 ".

Вам нужно скопировать папки x86 и x64 из "yourEmguFolder/bin" в каталог вывода проекта (bin). Затем снова запустите проект и запустите его.

Согласно emgu wiki

Ответ 2

Вероятно, не удается загрузить неуправляемые зависимости DLL. Несколько советов:

  • Убедитесь, что ваш проект .NET ориентирован на x86, а не на AnyCPU, поскольку у вас, вероятно, есть сборка с открытым кодом x86 OpenCV.
  • Убедитесь, что DLL OpenCV находятся в вашем PATH (или непосредственно в каталоге bin, если это приложение Console/WinForms/WPF.)

Ответ 3

Скопируйте и вставьте все неуправляемые библиотеки DLL в папку bin вашей установки EMGU, где находится ваш EXE файл (отпустите или отлаживайте папку в папке проекта).
В моем случае неуправляемые dll находятся в папке "C:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\x86"

Ответ 4

вы должны добавить dll зависимостей в проект и изменить свойство копировать в каталог 'на' copy always '(добавить → существующий элемент) из Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\x86

в моем проекте добавить: opencv_core290.dll, opencv_highgui290.dll, opencv_ffmpeg290.dll, opencv_imageproc290.dll и cudart32_55.dll

Ответ 5

Сначала вам нужно добавить три проекта в свой проект. opencv_core290.dll, opencv_highgui290.dll, opencv_imgproc290.dll. Здесь 290 ссылается на вашу версию opencv. После этого изменения в их собственности "Не копировать" на "копировать всегда". чем сохранить ваш проект. После этого перейдите в следующее место. Если ваш компьютер находится на 64 бит, перейдите в следующую папку "C:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\x64" или если вы используете 32-битные символы os, а затем перейдите в "C:\Emgu\emgucv- windows-universal-cuda 2.9.0.1922\bin\x86" и скопируйте все DLL в эту папку и вставьте это в свою папку Project/bin/debug/. чем перестроить ваш проект. Чем это будет хорошо работать.

Удачи!!!!

Ответ 6

Обнаружено это на С#, VS 2017, emgu версии 3.2.0.2682

Пробовал простую сборку на AnyCPU и получил исключение из плохого формата. Поэтому я попробовал исключение формата x86 из-за возможных предложений в комментариях. Наконец, я поставил его как x64, и он работал нормально.

Ответ 7

У меня была такая же проблема на 32-битной машине в течение 3 дней. Я решил это, просто скопировав все dlls в папку system32 из папок bin и x86, и это сработало. Похоже, что есть dll, которые зависят от других dll и момента, когда вы передаете все, что он работает. У меня не было времени узнать, какой из них.

Ответ 8

Для меня проблема была решена нажатием в Visual Studio:

Меню → Проект → Свойства → Сборка → Предпочитают 32-бит.

Возможно, это была проблема с emgu (возможно, x86) и моей ОС x64).

Ответ 9

вы можете использовать LD_LIBRARY_PATH для его решения:

  • откройте предупреждение и проверьте, что лишена вашей программы

  • найдите путь

    $найдите #, чтобы найти путь к библиотеке

  • В вашей среде IDE установите переменную среды LD_LIBRARY_PATH в путь lib (я использую monodevelop, путь Run → Run With → Custom Parameters...)

он работает сейчас хорошо:)