如何将OpenCV 4.0集成到纯C++的Android NDK项目中?

7
我应该采取哪些步骤,将OpenCV的最新版本集成到一个纯C++(无Java代码)的Android NDK项目中,例如Android NDK Google教程:Endless-Tunnel官方文档中提到的Android集成方式适用于较旧的版本:OpenCV-2.4,并且文件夹结构已经不同。我在Linux上使用Android Studio。非常感谢您的帮助。
2个回答

9
  1. Download opencv Android package (e.g. opencv-4.0.1-android-sdk) and unpack to, say, ~/android.

  2. To the bottom of CMakeLists.txt, add

    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_imgcodecsopencv_stitching等)。 这些静态库假定默认的ANDROID_STL=c++_static

为了获得最佳效果,请使用NDK r.18r.19

更新: NDK r.21适用于opencv 4.3.0


1
看起来是完美的答案,但我需要大约3天时间来确认。非常感谢你。 - Sadern Alwis
2
这对我来说看起来像是Android Gradle插件中的一个小故障。我必须再做一些实验。简单的解决方法是将<opencv>/sdk/native/libs添加到jniLIbs.src中。 - Alex Cohn
1
手动创建了jniLibs文件夹,并将~/OpenCV-android-sdk/sdk/native/libs的内容复制到该文件夹中。[链接]https://www.youtube.com/watch?v=Lg24S-Y8NU8 谢谢@AlexCohn。如果您在尝试后找到解决方案,请告诉我。 - Sadern Alwis
1
谢谢@AlexCohn - Sadern Alwis
1
在使用Android Gradle Plugin 4.0时,导入目标不再需要自定义复制命令。详见:https://developer.android.com/studio/projects/gradle-external-native-builds#jniLibs - spectralio
显示剩余7条评论

2

如果您想创建共享对象(.so)并且不使用Android Studio进行编译,这里是我的博客。当您需要创建本地第三方库时,这通常非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接