移动端Android Opencv JNI 如何配置,快速,简单。

版权声明:我是南七小僧,微信: to_my_love ,寻找人工智能相关工作,欢迎交流思想碰撞。 https://blog.csdn.net/qq_25439417/article/details/84974453

因项目需要移植算法到Android平台,开始学习如何再移动端上使用Opencv。自己复现了opencv中的一些代码,但是执行速度不及opencv。

推荐阅读:

https://blog.csdn.net/martin20150405/article/details/53284442

1.准备好SDK环境

参照谷歌官文:https://developer.android.google.cn/studio/projects/add-native-code#link-gradle

在SDK Manager下安装好CMake\LLDB\NDK

2.创建一个新工程

3.配置OpenCV Android SDK

注意此处:不同于前面给的3篇文章,本文不需要创建jniLibs文件夹和对jniLibs的gradle设置,新的AS已经可以自动打包到apk

此文用官方编译发布的OpenCV Android SDK 3.4.1来进行演示(不含contrib库),contrib库需要自己编译,如何编译以后再写。

①opencv头文件

以我的为例,sdk下载在桌面,C:\Users\xy\Desktop\opencv-3.4.1-android-sdk\

将C:\Users\xy\Desktop\opencv-3.4.1-android-sdk\OpenCV-android-sdk\sdk\native\jni 文件夹内的include文件夹拷贝到工程C:\Users\xy\Desktop\CSDN\app\src\main\cpp目录下,这样以便C++编程时能使用OpenCV头文件

拷贝过去后对native-lib.cpp进行编辑引用头文件,尝试写个opencv语句,可以看到已经出现代码提示,如下图

当然此时还不能编译,因为还没有将opencv的库信息导入工程

②编辑CMakeLists.txt

推荐使用上面给出的2、3文章链接的方式导入opencv库信息,以我的sdk目录为例应该如下设置:

#参考 https://blog.csdn.net/u010677365/article/details/76922541

set(OpenCV_STATIC ON)#1
set(OpenCV_DIR C:/Users/xy/Desktop/opencv-3.4.1-android-sdk/OpenCV-android-sdk/sdk/native/jni)#2
find_package(OpenCV REQUIRED)#3
target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib}
                       ${OpenCV_LIBS}#4
                        )


请注意下图sdk路径分隔符号表示方式为/而不是winows的\

配置CMakeLists完成后,同步gradle,会在工程android视图下面看到,被应用的库

理论上现在就可以编译了,编译试试。如下图,

到这里我当时就懵逼了,这也就是我前面说的很简单巨坑

③NDK编译报错的解决方法

更换工程NDK设置,不要使用AndroidStudio SDK管理器里面下载的NDK工具包

替换为R14或者R16的NDK包,为什么是R14或者R16?因为最新的R17也编译不了,说多了都是泪,这就是我这几天爬的坑!!!

自带工具下载的NDK不完整编译会报各种错误,较新的其他完整包如R17也不行,估计是OpenCV源码cmake配置的问题,R14和R16我验证过没有问题请放心使用。

附上NDK下载链接 https://developer.android.google.cn/ndk/downloads/older_releases

④编译工程

成功!!!

说明下:我推荐的上面3篇文章,有提到abi版本过滤设置,请根据你的目标环境设置app下的gradle

例如,只需要armeabi-v7a,可以启用图中注释部分

abiFilters 'armeabi-v7a'

另外如果除了opencv还有其他库要引入,请考虑使用jniLibs文件夹,并配合设置gradle。具体过程可以参见开头那三篇文章。

2018.05.30 工程源码:https://download.csdn.net/download/a390641326/10446257

猜你喜欢

转载自blog.csdn.net/qq_25439417/article/details/84974453