1. 程式人生 > >移動端Android Opencv JNI 如何配置,快速,簡單。

移動端Android Opencv JNI 如何配置,快速,簡單。

因專案需要移植演算法到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