Android Studio搭建opencv開發環境

文章不配圖片,閱讀需要有Android開發基礎并熟悉Android Studio。

一、搭建基于Java開發環境

以下內容介紹如何搭建基于Java jni的opencv開發環境。

1、準備工作

opencv官網下載Android平臺開發sdk并解壓,假設解壓后文件夾名為opencv-4.3.0-android-sdk。(此處以4.3.0為例)

2、創建項目

使用Android Studio(下簡稱AS)創建項目,假設項目名叫 cvdemo

3、創建Module

創建新的Module作為opencv sdk,假設其名為opencv4。

之所以選擇創建新Module而不是導入,只是因為opencv提供的目錄結構像是ADT,gradle將會有大量配置目錄的信息。

4、導入代碼

  • java代碼res資源放進Module的對應目錄;

  • 將存放本地動態文件*.so的 /opencv-4.3.0-android-sdk/sdk/native/libs/ 目錄拷貝到opencv4的根目錄下,即:/cvdemo/opencv4/libs/。

  • 打開opencv4build.gradle,在android內添加sourceSets,如下:

android {
   ...//其他配置信息
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']//此目錄即為上述添加的目錄
        }
    }
   ...//其他配置信息
}
  • 刷新項目,項目下會出現名為jniLibs的虛擬目錄,并能查看到對應平臺下的本地動態文件*.so。

此時已經可以依賴此Module實現Java開發。


二、搭建基于C/C++開發環境

雖然opencv提供面向Android的SDK,但是實際測試效果并不理想,特別在遍歷Mat的時候,那效率簡直感人。所以采用本地開發也是不錯的選擇。

繼續配置以下內容實現本地開發,以下內容假設項目是在 app Module內做本地開發。

5.配置jni開發

打開項目的local.properties文件,AS默認沒有配置ndk目錄,確保ndk目錄配置正確:

// 把sdk.dir和ndk.dir路徑修改成你自己的目錄
sdk.dir=/Applications/Android_SDK_Manager
ndk.dir=/Applications/Android_SDK_Manager/ndk/21.1.6352462

6.復制頭文件

找到頭文件*.h*.hpp所在的目錄/opencv-4.3.0-android-sdk/sdk/native/jni/include/,將其下的所有內容(在4.3.0版本,其下只有一個opencv2目錄)拷貝到/opencv4/src/main/cpp/下。

因為頭文件不是開發源代碼,所以不需要添加到build.gradle里。
只要讓CMakeLists.txt能導入即可。

7. 創建CMakeLists.txt

創建目錄/cvdemo/app/src/main/cpp/,做為本地開發代碼的目錄。

假設本地項目只有my_native.cpp一個文件,并將編譯成名為libmy_native.so的動態文件。

在cpp目錄下創建文件CMakeLists.txt,內容如下:

#CMakeLists.txt
#定義變量,名為opencv,值為opencv sdk(opencv4 Module)目錄,
#為了項目導入導出后不用修改,此處采用相對路徑定位。
#CMAKE_SOURCE_DIR變量為CMakeLists.txt所在目錄。
set(opencv ${CMAKE_SOURCE_DIR}/../../../../opencv4)

cmake_minimum_required(VERSION 3.4.1)

#配置加載native依賴
#引入opencv頭文件所在目錄
include_directories(${opencv}/src/main/cpp)
#引入opencv庫
add_library(
        opencv_java4
        SHARED
        IMPORTED)
#引入動態文件
set_target_properties(
        opencv_java4
        PROPERTIES IMPORTED_LOCATION
        ${opencv}/libs/${ANDROID_ABI}/libopencv_java4.so)

#以下為開發的本地庫的配置,此處不做詳解
add_library(
        my_native
        SHARED
        my_native.cpp)
find_library(
        log-lib
        log)
target_link_libraries(
        my_native
        #此處也要添加
        opencv_java4
        ${log-lib})

8. 修改build.gradle

接著修改本地源碼所在的Module(此處假定的是app)的build.gradle,內容如下:

android {
    ...//其他配置信息
    defaultConfig {
        ...//其他配置信息
        externalNativeBuild {
            cmake {
                cppFlags "-frtti -fexceptions"
                arguments "-DANDROID_STL=c++_shared"http://導入C++標準庫
            }
        }
        ndk {//需要編譯的平臺
            abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
        }
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"http://cmake所在位置
            version "3.10.2"
        }
    }
    ...//其他配置
}
...//其他配置
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //最后別忘了引用opencv sdk Module
    implementation project(path: ':opencv4')
    ...//其他引用內容
}

9、其他

  • my_native.cpp提供的jni接口函數,本文不做贅述,可以查看其他相關文檔。
  • 因為各種配置相關路徑在build.gradle和CMakeList.txt里都可以修改,所以可以根據自己情況做修改。

參考:
HelloWorld CMake CMake中構建靜態庫與動態庫及其使用
NDK調用第三方so文件
Android studio配置Opencv開發環境

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379