OpenCV Java API или OpenCV C ++ API в Android устройствах? - PullRequest
1 голос
/ 17 марта 2020

Я видел 2 способа использования OpenCV на Android устройствах:

  1. с Java OpenCV API
  2. с C ++ OpenCV API

Мой вопрос: какой из них лучше, быстрее, проще в настройке / кодировании? Или, если мой вопрос неправильный, каковы плюсы и минусы для каждого пути? Я прочитал документацию OpenCV и несколько статей, но не смог найти ответ на свой вопрос.

Ответы [ 3 ]

0 голосов
/ 17 марта 2020

Я полагаю, что это должно повлиять на реализацию вашего приложения. Это java или c ++ (нативное) приложение? Является ли обработка изображений важной нагрузкой для вашего приложения? Вам нужна скорость вычислений или скорость реализации? Во всяком случае, я использовал OpenCV (реализация C ++) в java через JNI и NDK. Ядро моего приложения - обработка изображений, и скорость обработки данных очень меня интересует (почти в реальном времени). Все написано на C ++, так как у меня есть как настольные, так и мобильные реализации моей системы обработки изображений.

В мобильном приложении (для android) моя система обработки изображений встроена в приложение java. Отсюда я вижу обработку, разделенную на две части: получение изображения (через камеру устройства) и обработку изображения (через OpenCV). Получение изображения все сделано в java. Работа не была тривиальной, так как главной проблемой, которую я обнаружил, было получение RGB-кадров с камеры (изначально YUV), передача их в OpenCV, получение результатов от OpenCV и рендеринг их в представление поверхности приложения.

Взаимодействие с камерой и OpenCV может быть головной болью, в основном в зависимости от возможностей вашего устройства и версий SDK. После получения изображения обработка была относительно безболезненной. Вся моя система была ранее отлажена на моем P C, и я точно знал, чего ожидать. Все функции OpenCV вели себя должным образом, поэтому у меня почти не было проблем с этой частью.

Я также потратил много времени на работу в C ++, так что это было фактором, определяющим, какую реализацию выбрать. Теперь приложение в значительной степени настроено. Я могу добавить новые функции и протестировать их в своем P C и довольно быстро обновить мобильный порт.

0 голосов
/ 26 марта 2020

OpenCV Java API - это стандартный способ использования OpenCV с Android. Это в основном слой Java поверх API C ++, где каждая функция OpenCV Java вызывает свой эквивалент C ++ через JNI (Java собственный интерфейс ).

Выполнение вызова JNI приводит к небольшим издержкам, увеличивая время выполнения вашей функции OpenCV при использовании Java API. Если ваш конвейер обработки изображений выполняет много вызовов функций OpenCV (скажем, N вызовов), то накладные расходы на вызовы JNI будут влиять в N раз на ваш конвейер, что может замедлить общее время вычислений.

Альтернативой является реализация всего конвейера обработки изображений на C ++ и вызов этого кода C ++ с Java, что снижает накладные расходы только на один вызов JNI.

Плюсы OpenCV C ++:

  1. Скорость
  2. Возможность многократного использования существующего кода C ++
  3. Все доступные API OpenCV

OpenCV Java плюсы:

  1. Легче в развертывании
  2. Легче в реализации
  3. Легче в отладке
0 голосов
/ 17 марта 2020

Пожалуйста, посмотрите на него для открытого резюме android версия

https://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/O4A_SDK.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...