Как я могу интегрировать OpenCV 4.0 в чистый проект C Android NDK?

#android #c #opencv #android-ndk

#Android #c #opencv #android-ndk

Вопрос:

Какие шаги мне необходимо предпринять для интеграции,

последняя версия OpenCV

в проект Android NDK на чистом C (без кода Java), такой как Android NDK Google tutorial:

Бесконечный туннель?

официальная документация по интеграции Android относится к гораздо более старой версии: OpenCV-2.4, и структуры папок больше не те.

Я использую Android Studio в Linux.

Я высоко ценю любую помощь.

Ответ №1:

  1. Загрузите пакет opencv для Android (например, opencv-4.0.1-android-sdk) и распакуйте, скажем, ~/android .

  2. В нижней части CMakeLists.txt, добавить

     set( OpenCV_DIR "~/android/OpenCV-android-sdk/sdk/native/jni" )
    find_package( OpenCV REQUIRED )
    target_link_libraries(game opencv_java)
      

Пакет определит следующие переменные:

OpenCV_LIBS : список всех импортированных целевых объектов для модулей OpenCV.

OpenCV_INCLUDE_DIRS : список каталогов OpenCV включает каталоги. С CMake >= 2.8.11 вам даже не нужно писать

 include_directories(${OpenCV_INCLUDE_DIRS})
  

Эта версия встроенного OpenCV SDK также определяет

OpenCV_VERSION : версия этой сборки OpenCV: «4.0.1»

OpenCV_ANDROID_NATIVE_API_LEVEL : Минимально необходимый уровень Android API: «16».

Это означает, что для манифеста вашего приложения требуется minSdkVersion 16 или выше (исходный образец нуждается в исправлении здесь).

Вместо общей библиотеки, которая содержит все функциональные возможности OpenCV, вы можете использовать статические библиотеки (opencv_imgcodecs, opencv_stitching, et al). Эти статические библиотеки принимают значение по умолчанию ANDROID_STL=c _static.

Для достижения наилучших результатов используйте NDK r.18 или r.19.

ОБНОВЛЕНИЕ: NDK r.21 хорошо работает для opencv 4.3.0.

Комментарии:

1. Выглядит как идеальный ответ. но мне нужно около 3 дней для подтверждения. большое вам спасибо.

2. Мне кажется, это сбой в плагине Android Gradle. Я должен еще немного поэкспериментировать. Простым решением является добавление <opencv>/sdk/native/libs в jniLibs.src

3. Вручную создал папку jniLibs и скопировал содержимое ~/OpenCV-android-sdk /sdk/native / libs в эту папку. [ссылка] youtube.com/watch?v=Lg24S-Y8NU8 Спасибо @AlexCohn. если вы найдете решение после эксперимента, пожалуйста, дайте мне знать.

4. Спасибо @AlexCohn

5. Пользовательская команда копирования больше не нужна для импортированных целей при использовании плагина Android Gradle 4.0, смотрите Здесь: developer.android.com/studio/projects /…

Ответ №2:

Если вы хотите создавать общие объекты (.so) и компилировать без использования Android Studio, вот мой блог. Это часто бывает полезно, когда вы хотите создать собственную стороннюю библиотеку.