Инициализатор типа для "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;
}
Что я мог сделать неправильно и как я могу отладить это дальше? Спасибо!
Ответы
Ответ 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...)
он работает сейчас хорошо:)