這篇文章看題目讓人有點眼暈,且與之前的文章:終極篇 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++中可以直接這樣用,不知道原因是啥