OpenCV - Android Studio 中集成Opencv環境(不包含opencv_contrib部分)


  OpenCV是一個基於BSD許可(開源)發行的跨平台計算機視覺庫,支持的運行環境也是非常的多,這篇文章主要講的是Android環境集成OpenCV(IDE是Android Studio,我想Eclipse應該可以拋棄了哈~)。

  當然,通過本文所講集成OpenCV之后,SIFT/SURF/FREAK等算法是不可以用的,這是因為OpenCV3之后,OpenCV將其轉移到了opencv_contrib部分,需要我們將opencv_contrib編譯進入之后再進行集成,這個在之后的文章里在說(這個還是兩個月前搞的,部分情節可能記得不是很清楚,歡迎大神指出)。

首先要做好的是准備工作:

  Android Studio:安裝教程網上有很多

  OpenCV for Android:https://opencv.org/releases.html

  Opencv for Android庫下載解壓之后得到:

    

  文檔結構說明:

  • apk目錄里面放的是OpenCV Manager的安裝文件,是不同CPU版本要選擇不同apk安裝文件,這種方式調用OpenCV需要用戶自己安裝OpenCV Manager,帶來的用戶體驗很差,我們希望App自身能夠默認安裝OpenCV Manager,這篇文章將會告訴你如何做;
  • doc目錄里面放的是相關文檔與OpenCV的LOGO;
  • samples目錄里面放的是OpenCV4Android的演示代碼,大家可以參考一下;
  • sdk目錄里面放的就是我們需要集成到Android Studio中的項目上去的東西,很重要。

接下來就是正式的集成了集成步驟了:

  在Android Studio中創建一個Androd項目,進入項目之后,選擇:File->New->Import Module

    

    

  選擇剛剛解壓得到的OpenCV庫路徑下sdk->java,得到結果如下(顯示感嘆號的原因是因為我已經導入過了):

    

  一次點擊下一步,導入成功后,可以看見:

    

  然后需要添加依賴,點擊File->Project Structure,點擊Module下App,選擇Dependencies:

    

  添加依賴之后,就可以在項目中引用OpenCV相關API代碼了,如果你此刻運行App,它就會提示你安裝OpenCV Manager。這對於我們來說不算集成成功,因為自己的APP就無法獨立安裝,必須依賴OpenCV Manager這個apk文件才可以運行。

接下來說如何解決該問題:

  首先OpenCVLibrary的build.gradle文件中的一下參數修改為與app的build.gradle文件中相同(紅框標出的部分為需要修改的部分):

    

  然后將下載解壓得到的OpenCV4Android庫目錄下的sdk->native->libs中的文件全部拷貝到項目的lib目錄下:

    

 

  然后在app的gradle文件中添加(紅框標出部分為本次添加內容):

    

  gradle的完整代碼如下:

 1 apply plugin: 'com.android.application'
 2 
 3 android {
 4     compileSdkVersion 25
 5     buildToolsVersion "27.0.1"
 6     defaultConfig {
 7         applicationId "com.example.easysilkver01"
 8         minSdkVersion 15
 9         targetSdkVersion 25
10         versionCode 1
11         versionName "1.0"
12         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
13     }
14 
15     useLibrary 'org.apache.http.legacy'
16 
17     buildTypes {
18         release {
19             minifyEnabled false
20             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21         }
22     }
23 }
24 
25 dependencies {
26     compile 'com.android.support:design:25.3.1'
27     compile fileTree(include: ['*.jar'], dir: 'libs')
28     compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
29     androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
30         exclude group: 'com.android.support', module: 'support-annotations'
31     })
32     compile 'com.android.support:appcompat-v7:25.3.1'
33     testCompile 'junit:junit:4.12'
34     compile project(':openCVLibrary320')
35 }
36 
37 task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') {
38     destinationDir file("$buildDir/native-libs")
39     baseName 'native-libs'
40     from fileTree(dir: 'libs', include: '**/*.so')
41     into 'lib/'
42 }
43 
44 tasks.withType(JavaCompile) {
45     compileTask -> compileTask.dependsOn(nativeLibsToJar)
46 }

  至此,Android中OpenCV(不包含nonfree部分)就完全配置好啦,這樣既避免了NDK繁瑣又不用依賴OpenCV Manager第三方APP,你的APP就可以直接使用OpenCV了。需要注意的是:此配置方式OpenCV加載必須通過靜態加載方式。

最后:

  代碼demo就不貼了,網上帖子多的很,貼一下導入OpenCV庫的加載方法吧:

 1     /**
 2      * 導入OpenCV庫
 3      */
 4     private void initLoadOpenCVLibs() {
 5         boolean success = OpenCVLoader.initDebug();
 6         if (success) {
 7             Log.d(TAG, "initLoadOpenCVLibs:OpenCV加載成功!");
 8         } else {
 9             Log.d(TAG, "initLoadOpenCVLibs:OpenCV加載失敗!");
10         }
11     }

  最后,感謝http://blog.csdn.net/jia20003/article/details/53126321#reply的文章,幫我當初解決了這個問題,但是他的文章中配置過程有一個地方說的有問題,所以當時我也是搗鼓了蠻久,幸運的是這篇文章中我已經糾正過來啦。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM