Исключение Opencv Java

Я использую Windows 7 и получаю это исключение при попытке запустить проект Java, который использует библиотеки opencv:

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.opencv.highgui.Highgui.<clinit>(Highgui.java:416)
at teste.main(teste.java:21)

Что я сделал неправильно? Не хватает ли какого-либо импорта?

Я хочу создать простой Java-проект в Eclipse (не Android), который использует openCV.

  • Итак, я извлек javacv из файла OpenCV-2.4.2.exe в C:\
  • Затем выполняется "cmake -G" MinGW Makefiles "-DBUILD_opencv_java = ON C:\opencv "и после этого" mingw32-make ". строить без ошибок или предупреждений
  • После того, как я добавил opensv dll в переменные среды

Ответ 1

Это исключение возникает из-за того, что система пытается найти родные библиотеки, которые нужны OpenCV для этой конкретной платформы, и не находит их.

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.

Чтобы решить эту ошибку:

  • Если вы используете opencv версию < opencv 2.4.6, то ответ, данный @user3033420, является решением.
  • Если вы используете версию >= opencv 2.4.6, то в jar есть константная переменная в Core class с именем NATIVE_LIBRARY_NAME, которые вы передаете функции loadLibrary() в классе FaceDetector, чтобы включить функции opencv в ваш проект, вы, вероятно, уже имеете это:

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    

Используя указанную выше константу, нет необходимости запоминать имя файлов dll strang.

Добавьте opencv 2.4.9.jar в путь сборки из параметров проекта, как:

Window -> Preferences -> Java Build Path –> Add Library -> User Libraries -> 
User Library -> & click New

Появится диалоговое окно, как показано ниже. Добавьте opencv-2.4.9 в качестве имени библиотеки и нажмите "ОК".

Create New User Library

Затем Add External Jar и найдите свою банку opencv и нажмите ok. Затем разверните opencv-2.4.9.jar и нажмите Местоположение Native Library (Нет), как показано ниже:

Add Native Library Location of OpenCV

Необходимый шаг: введите расположение папки, содержащей встроенную библиотеку, используемую "opencv-2.4.9", а затем нажмите "ОК", как показано ниже:

Native Library Folder Configuration

Итак, теперь в jar теперь есть все собственные библиотеки, необходимые для выполнения этой работы. Перестройте java-программу, и все должно компилироваться и запускаться в соответствии с проектом.

Ответ 2

Попытка загрузить библиотеку, выполнив следующие действия:

 System.loadLibrary("opencv_java244")

Или сделав это:

 System.loadLibrary("opencv_java244")

Не работает - по-прежнему была ошибка.

Наконец, работала полная версия файла dylib и использовала:

System.load(new File("/usr/local/Cellar/opencv/2.4.10.1/share/OpenCV/java/libopencv_java2410.dylib").getAbsolutePath());'

Я использую HomeBrew, но, тем не менее, вы его установили, просто найдите файл и обдумайте путь.

Ответ 3

Если вы получите эту ошибку:

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path

Это, вероятно, означает, что вы вызываете бедра, программируете по коричневатому движению, пытаясь заставить openCV работать. Как пытаться выяснить, как работает самолет в полете, яростно нажимая все кнопки. У вас будет плохое время.

Что означает ошибка:

Eclipse сообщает вам, что файл jar не может найти библиотеки, необходимые для выполнения своей работы. Поэтому, естественно, это не сработает, пока вы не сделаете их доступными. Вам нужно найти учебное пособие "Как создать openCV из источника" на вашей конкретной платформе: (windows, mac, linux и т.д.) (32 бит, 64 бит и т.д.).

В принципе, вы затушевывали настройки "Native library location" или не задавали их правильно, и поэтому банку не удается найти библиотеки поддержки, написанные в C.

Как это исправить, вид в тысячу футов:

  • Загрузите исходный код для openCV для вашей операционной системы.
  • Следуйте указаниям по созданию openCV из источника.
  • Скопируйте банку в каталог lib в вашем проекте Java.
  • Настройте банку для поиска своих родных библиотек, установив "местоположение родной библиотеки" в каталог build/lib в том пути, где вы создали openCV из исходного кода.
  • Очистите проект java, и UnsatisfiedLinkError должен уйти.

В этом блоге описаны шаги, описанные выше, поэтапно: https://udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java/

Почему это не может быть просто банкой?

Потому что большая часть openCV написана на языке программирования C. И файл jar, который вы используете, - это просто окно в этот мир C. Так что это рубельная машина Голдберга. Вы увидите эти вещи повсюду в реальном мире работы, поэтому обратите внимание, вы получаете образование здесь.

Ответ 4

Я нахожу решение. Фактическая dll находится в папке openCV\opencv\build\java\x64\. В моем случае его имя opencv_java247.dll, поэтому я изменил строку кода Java

System.loadLibrary("opencv_java244") 

к

System.loadLibrary("opencv_java247") 

Я также устанавливаю расположение родной библиотеки как E:/Sagar_tools/tools/openCV/opencv/build/java/x64 (полный путь к dll) в пути сборки.

Ответ 5

Функция loadlibrary пытается найти имя DLL в вашей переменной PATH - проверьте имя DLL. Вы также можете попробовать System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Ответ 6

В этом случае вы должны указать путь для jvm, где файл opencv dll задан как: -Djava.library.path = "C:\opencv\build\java\x64" и добавьте код как:  System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Как, я пробую это в своем netbeans ide, и моя проблема решена.