基于adt bundle for windows-的androidopencv安裝文檔說明
任薛紀
說明:本文檔是基于快速搭建android開發平台adt bundle for windows軟體的androidopencv運作環境搭建,主要參考opencv官方文檔: ,如手動安裝eclipse、sdk、adt、cdt等android開發環境,請參考如上的官網文檔。官方文檔提供了兩種androidopencv的安裝方法。
下載下傳 (tadp)內建軟體包,運作tadp軟體包将會線上下載下傳所有的軟體包,然後自動安裝和配置運作環境(環境變量)。當安裝完後,打開eclipse軟體,然後按照如下兩步來分别導入opencv library和samples。注意,盡量按照兩步導入,否則可能會出現路徑找不到問題。
1、import->general->existing project into workspace->next->browse-> x:\android\opencv-2.4.3.2-android-sdk-tadp(androidopencv根目錄),僅選擇opencv library,不選擇copy projects into workspace.
)
2、import->general->existing project into workspace->next->browse-> x:\android\opencv-2.4.3.2-android-sdk-tadp(androidopencv根目錄),選擇除opencv library的所有samples,不選擇copy projects into workspace.
3、為每一個項目選擇android平台,選擇項目,點選屬性,定位android,從中選擇一個android平台。注意:對于opencv2.4.3,項目opencv library的最低平台為android 4.2(即api level 17),否則會提示編譯問題。sample的android平台可以低一些。
4、如果出現編譯問題,需要重複重新整理,清理和編譯。
1、jdk
2、adt bundle for windows,該內建軟體內建了eclipse、sdk、adt、cdt等軟體下載下傳位址:
androidopencv需要的軟體
1、android-ndk-r8d
2、opencv-2.4.3.2-android-sdk-tadp
1、解壓android-ndk-r8d和opencv-2.4.3.2-android-sdk-tadp
2、為ndk添加環境變量android_ndk_root=x:\android\android-ndk-r8d。(my computer -> properties -> advanced -> environment variables)
3、打開eclipse軟體,然後按照如下兩步(4和5兩步)來分别導入opencv library和samples。注意,盡量按照兩步導入,否則可能會出現路徑找不到問題。
4、import->general->existing project into workspace->next->browse-> x:\android\opencv-2.4.3.2-android-sdk-tadp(androidopencv根目錄),僅選擇opencv library,不選擇copy projects into workspace.
5、import->general->existing project into workspace->next->browse-> x:\android\opencv-2.4.3.2-android-sdk-tadp(androidopencv根目錄),選擇除opencv library的所有samples,不選擇copy projects into workspace.
6、為opencv library項目選擇android平台,選擇項目,點選屬性,定位android,從中選擇一個android平台。注意:對于opencv2.4.3,項目opencv library的最低平台為android 4.2(即api level 17),否則會提示編譯問題。
7、androidopencv提供兩種使用方法,一種為java opencv,另一種為native opencv。
7.1 對應java opencv,不使用ndk。隻要保證選擇android平台和opencv庫,就可以運作。
注意,如果opencv library編譯沒有正常編譯,則samples會出現感歎号“!”,由于沒有找到opencv的依賴庫opencv library-2.4.3.jar。
7.2 對應native opencv,首先應該保證7.1能夠正常通過,然後還需配置ndk,編譯c/c++語言。需要對c/c++ build的builder settings和behavior進行設定。
8、對jni的編輯,如果打開jni裡面的c/c++程式,将會提示很多錯誤,而且再也不能夠運作該項目了。如下圖
10、為了解決此問題,需要指明c/c++基本庫的位置和opencv的位置,如下圖所示,注意的是,可能ndk的環境變量的名稱不一樣,是以要根據環境變量的名稱來替換android_ndk_root,特别注意的是,opencv的路徑按照官方文檔來做可能不能夠作用,如果不行,直接按照計算機路徑添加opencv的路徑。
配置條目如下:
${android_ndk_root}/platforms/android-9/arch-arm/usr/include
${android_ndk_root}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include
${android_ndk_root}/sources/cxx-stl/gnu-libstdc++/4.6/include
d:\android\opencv-2.4.3.2-android-sdk-tadp\sdk\native\jni\include
11、要運作androidopencv還需要在手機裝置上安裝opencv_2.4.2_binary_pack_tegra3.apk和opencv_2.4.2_manager.apk
安裝如下:
adb install <path to tadp directory>
/opencv-2.4.2-tegra-sdk/apk/opencv_2.4.2_binary_pack_tegra3.apk
1、點選項目屬性->c/c++ build->builder settings->build command,使用ndk-build編譯時,加上如下參數ndk_debug=1,之後生成so檔案之外,還會生成gdbobserver,gdb.setup調式檔案,如下圖:
2、在項目的debug configuration中選擇android native apllication,點選下方debug,如下圖:
1、建立一個名為testopencv的android項目,項目的位置和androidopencv在同一個盤符,否則這項目不能夠添加opencv library,如下圖所示:
2、将testopencv項目轉化為c/c++項目
3、繼續下一步,注意其中的後兩部,為的時候自己配置ndk編輯c/c++程式
4、建立jni檔案夾,将opencv tutorial 4 - mix java+native opencv裡面jni下面的檔案拷貝到建立的檔案夾中。
5、添加opencv library(如果建立的項目的盤符不在opencv所在的盤符,需要拷貝建立項目到androidopencv的盤符,否則不能夠添加opencv library)。
6、打開jni_part.cpp檔案,添加c/c++庫和opencv庫,消除編譯錯誤,如下圖,其中内容如下。需要注意的是,官方文檔有說明如下:
# for ndk r8 and prior:
${ndkroot}/platforms/android-9/arch-arm/usr/include
${ndkroot}/sources/cxx-stl/gnu-libstdc++/include
${ndkroot}/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include
${projdirpath}/../../sdk/native/jni/include
# for ndk r8b and later:
${ndkroot}/sources/cxx-stl/gnu-libstdc++/4.6/include
${ndkroot}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include
由于我的版本是r8d的,是以選擇第二種
7、修改jnicall導出函數,格式為:
jniexport void jnicall java_建立項目報名(“.”用”_”代替)_調用class名_findfeatures(jnienv*, jobject, jlong addrgray, jlong addrrgba);
如:jniexport void jnicall java_com_example_testopencv_mainactivity_findfeatures(jnienv*, jobject, jlong addrgray, jlong addrrgba);
8、将opencv tutorial 3 - add native opencv項目裡面的sample3native.java檔案内容拷貝到mainactivity.java,同時去掉錯誤。
9、修改system.loadlibrary("mixed_sample");
10、将opencv tutorial 3 - add native opencv項目裡面的tutorial3_surface_view.xml檔案複制到建立項目對應的layout檔案夾中
11、配置ndk,如下兩圖
13、修改android.mk檔案,修改引入opencv library的路徑
include ../sdk/native/jni/opencv.mk
14、修改androidmanifest.xml檔案,添加如下權限
<uses-permission android:name="android.permission.camera"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
15、注意android平台的版本,可能由于版本問題導緻不提示任何錯誤,但隻顯示錯誤。