到目前爲止,2016年6月,opencv for android 官方最新版本是3.1,上面給出了很多案例源碼,包括非常有名的人臉檢測,精度不錯。
官方的案例都是在Eclipse上寫的,所以個人處於便於學習的目的也就使用了Eclipse,但是我在按照網上先導入sdk,配置好opencv java庫,再把案例導入時出現一大堆錯誤,後來查證全是庫的問題。
下面仔細講解案例:
第一類,沒有使用JNI
,即僅僅使用opencv的java接口調用opencv的,導入時,比如官方第一個案例opencv sample -15 puzzled ,常常會有以下報錯:
這是因爲你的java庫沒有導入到該項目中,選中項目,右鍵打開properties或者快捷鍵Alt+Enter,你會發現如下錯誤提示:
這時只要將錯誤的library刪掉,添加剛剛新導入的library就可以發現項目沒有錯誤了:
如果到這裏,大家覺得萬事大吉了,那就是too young too simple,
接下來纔是精華,不信,你可以把項目生成apk,放到手機中,再安裝相應的opencv manager,會發現它一直提示你opencv manager安裝不正確,然後你會換各種版本的opencv manager,直到你換個遍都沒找到,這時你應該思考是不是代碼的問題,這就對嘍!!
很簡單,因爲你沒有添加opencv庫,有人又想問了,我之前不是加了?,但是我要說這是兩個庫,在…\OpenCV-3.0.0-android-sdk\OpenCV-android-sdk\sdk\native下面有個libs文件夾,下面是你程序運行需要先添加到apk中的庫,把libs文件夾整體拷貝到你項目的根目錄下,即和src,bin,res等文件夾放到一起,這時再運行就可以了。官方可能都沒注意到這個錯誤,我使用他們打包好的apk都提示opencv manager沒有正確安裝!!!!
第二類,使用了jni(java native interface)
這類和前面相同的部分就不寫了,還是舉個例子,比如導入tutorial 2-mixed processing時,
- 不僅有前面的錯誤,
- 還會提示沒有找到ndk-build命令
- 如果你打開jni文件夾下面的jni_part.cpp文件還會發現vector頭文件錯誤
第一個前面有,這裏就不多說了,
第二個錯誤,還是找到properties,
在builder command這有一段${NDKROOT}/ndk-build.cmd
注意這個環境變量NDKROOT,我之前在網上發現很多人在配置NDK時,寫的是NDK_ROOT環境變量,這在Eclipse的默認環境變量不同,就多了一個”_“,導致錯誤,在這裏,我建議大家修改計算機環境變量爲NDKROOT,不要改Eclipse的,因爲Eclipse不止這一處引用NDK使用NDKROOT環境變量名。
第三個錯誤,那個錯誤是因爲沒有配置好NDK庫,這時選擇C++ general–Paths and symbols中的include選項,你會發現如下的配置:
GNU c++中引用了NDK的4.6版本,4.6版本,4.6版本,重要的事說三遍,這時我打開我的ndk相應的文件夾(備註,我使用的ndk是r10e)
這裏根本沒有4.6,所以我果斷改成4.8,程序運行成功了,大功告成