Какой Java API использовать с JavaCV?org.bytedeco.opencv.opencv_core или org.opencv.core? - PullRequest
1 голос
/ 23 сентября 2019

Я играю с OpenCV в Java (на самом деле в Scala).Я использую оболочки org.bytedeco (opencpp и javacv), но документация не очень хорошая.

Вопрос в том, что в зависимости от примеров используются два разных API: org.bytedeco.opencv.opencv_core или org.opencv.core

org.bytedeco.opencv.opencv_core работает нормально, но org.opencv.core throws java.lang.UnsatisfiedLinkError:

An exception or error caused a run to abort: no opencv_java410 in java.library.path 
java.lang.UnsatisfiedLinkError: no opencv_java410 in java.library.path

Я полностью потерян:

  1. Почему два разных API?
  2. Какой из них одиниспользовать?
  3. Почему org.opencv.core выдает исключение, когда org.bytedeco.opencv.opencv_core работает?

Спасибо вadvance.

Используемая библиотека: "org.bytedeco"% "javacv-platform"% "1.5.1", которая импортирует lib для всех платформ.

1 Ответ

1 голос
/ 23 сентября 2019

Я полностью потерян:

Библиотеки org.bytedeco.opencv.opencv_core и org.opencv.core - это библиотеки Java bridge , которые позволяют вызывать собственную библиотеку OpenCV.
Библиотеки Java генерируются из заголовочных файлов C / C ++ для библиотеки OpenCV.Например, сайт bytedeco.org , версия которого используется с помощью инструмента JavaCPP .

1) Почему два разных API?

Потому что две группы решили сделать это!Очевидно, что не так много работы для генерации Java-кода.

Почему две группы решили сделать то же самое?Pass.

Какой из них использовать?

Вопросы с рекомендациями не относятся к теме StackOverflow, поэтому я не буду их давать.

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

Возможно, вам следует рассмотреть версиюOpenCV API, который вы хотите использовать, и есть ли библиотеки мостов для этой версии от соответствующих поставщиков.

Почему org.opencv.core выдает исключение, когда org.bytedeco.opencv.opencv_core работает?

Обе версии библиотеки должны быть связаны с собственной библиотекой OpenCV.Эта ссылка не работает для org.opencv.core на вашей платформе исполнения.Для этого есть несколько возможных причин:

  1. Одна из библиотек opencv имеет встроенную копию библиотеки, а другая - нет.(Посмотрите, что находится внутри соответствующих JAR-файлов, и сравните их с тем, что говорится в этом Q & A о том, как встраивать нативные библиотеки: Как связать нативную библиотеку и библиотеку JNI в JAR? .)

  2. Ни один из файлов JAR не содержит встроенную библиотеку, но в вашем исполнении уже установлена ​​ соответствующая версия библиотеки.Неудачная версия ищет файл с именем "opencv_java410".

...