终极篇延伸:在android native c++项目中直接内嵌opencv算法
这篇文章看题目让人有点眼晕,且与之前的文章:终极篇 C++算法到安卓的移植——AS调用VS的so库有类似的嫌疑
那么这篇文章整理的目的是什么呢?
- 在安卓项目中以c++的方式调用opencv
- 可以一次生成x86 x86_64 armeabi-7v armx64-v8a相关库文件,不用根据平台不同再特别设置opencv的配置,且只用设置一次(我在vs2019中就需要设置多次,四个平台Release下就设置了4次)
所需软件:android studio3.5(安装好之后配置sdk,jdk,ndk)
opencv-android-sdk (opencv官网直接下载,解压到固定路径)
第一步:新建项目,选择native c++
建好之后在/app/src/main/cpp文件夹下默认生成一个native-lib.cpp和CmakeList.txt
第二步:修改生成的so库名称
默认情况下生成的库名称为native-lib.so
打开native-lib.cpp和CmakeList.txt 这两个文件,将native-lib出现的地方全都修改为想要生成的库名称,这里我改为textdetection-lib.so。(包括文件名称都要改)
第三步:配置opencv,使得opencv可以在cpp文件中以c++的方式调用
1. 修改CmakeList.txt 文件
2. 修改app/build.gradle文件,配置opencv和平台设置信息
3. 配置好后,需要将opencv-android-sdk中的文件夹sdk\native\libs下的所有文件拷贝到安卓项目的src/main/jinLibs文件夹下
第四步:修改textdetection-lib.cpp文件,以c++方式调用opencv
第五步: 显示结果,修改MainActivity.java
第六步:编译运行
编译:菜单栏-- -Build ---- Build Boulds / APK ---- Build APK
分析APK:菜单栏-- -Build ---- Analyze APK,这时可以看到所有平台的结果都显示在内。
运行:菜单栏 ---- Run ---- Run app
我在调用dnn的readNet函数时目前有错,运行时,去掉这一句即可,原因还未找到
错误提示是加载模型文件失败,但是我在c++中可以直接这样用,不知道原因是啥