OpenCV android sdk配置OpenCV android NDK開發實例

OpenCV簡介

OpenCV,全稱Open Source Computer VisionLibrary,是基于C/C++編寫的,是BSD開源許可的計算機視覺開發框架,其開源協議允許在學術研究與商業應用開發中免費使用它。OpenCV支持Windows、Linux、Mac OS、iOS與Android操作系統上的應用開發。

下載

  • 官網OpenCV官網Android最新版本SDK(我自己再用的是4.5.0)
  • 選擇OpenCV對應版本下的Android平臺

SDK概述

SDK目錄結構如下:

OpenCV-android-sdk
|_ samples
|_ sdk
|     |_ etc
|    |_ java
|    |_ libcxx_helper
|    |_ native
|          |_ 3rdparty
|          |_ jni
|               |_ abi-arm64-v8a
|               |_ abi-armeabi-v7a
|               |_ abi-x86
|               |_ abi-x86_64
|               |_ include
|          |_ libs
|               |_ arm64-v8a
|               |_ armeabi-v7a
|               |_ x86
|               |_ x86_64
|          |_ staticlibs
|               |_ arm64-v8a
|               |_ armeabi-v7a
|               |_ x86
|               |_ x86_64
|
|_ LICENSE
|_ README.android
目錄 文件
samples OpenCV運行案例
sdk OpenCV API以及依賴庫
sdk/etc Haar和LBP級聯分類器
sdk/java OpenCV Java API
sdk/libcxx_helper bring libc++_shared.so into packages
sdk/native OpenCV 靜態庫、動態庫以及JNI文件

集成OpenCV SDK

在Android應用中調用OpenCV進行圖像處理的方法有很多種,考慮到性能問題,本人推薦使用NDK進行開發,畢竟C/C++要比Java性能好的多。

一、集成OpenCV
OpenCV集成還是很簡單的,不需要我們自己去交差編譯生成動/靜態庫,解壓后的文件已經包含了動態庫。一般套路都是這樣,下載庫、導入.h和動/靜態庫、配置CmakeList。詳細步驟:

1.下載最新OpenCV SDK

2.新建項目

新建工程一定要勾選“Include C++ support”,這樣新建的Android工程會直接支持NDK開發,避免各種配置問題,如果提示沒有NDK,請下載NDK,并在工程“Project Structure”中導入即可:
新建工程勾選了“Include C++ support”,就已經支持NDK開發了(即native-lib),我們需要做的是,根據自己項目需要,增加JNI接口。

3.導入.h文件和.so動態庫

20201204135918.png

把OpenCV SDK的include文件復制到cpp文件夾下,把opencv的動態庫引入jniLibs文件下

4.CMakeLists.txt配置

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.10.2)

# Declares and names the project.

project("learning")

set(libs "${CMAKE_SOURCE_DIR}/src/main/jnilibs")
#導入libopencv_java4庫文件
add_library(libopencv SHARED IMPORTED)
set_target_properties(libopencv PROPERTIES
        IMPORTED_LOCATION "${libs}/${ANDROID_ABI}/libopencv_java4.so")
#導入頭文件
include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/include)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
        native-lib

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        src/main/cpp/native-lib.cpp)

# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
        log-lib

        # Specifies the name of the NDK library that
        # you want CMake to locate.
        log)

find_library( # Sets the name of the path variable.
        jnigraphics-lib
        jnigraphics)

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
        native-lib
        #添加opencv_java4
        libopencv
        ${jnigraphics-lib}
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

5.修改build文件

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        ····

        externalNativeBuild {
            cmake {
                cppFlags "-std=c++17"
                arguments "-DANDROID_STL=c++_shared"
                //生成.so庫的目標平臺
                abiFilters 'armeabi-v7a', 'arm64-v8a'
            }
        }
    }

    ····
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"http:// CMakeLists.txt路徑
            version "3.10.2"http://CMakeLists.txt版本
        }
    }


    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}

clean一下,并重新編譯,這樣NDK就支持OpenCV開發了。

PS:到這里,只是表示NDK C++層可以支持OpenCV開發了,要是想在Java層中,直接使用OpenCV的Java包,還需要導入“OpenCV-android-sdk”的Java,方法是可以參考:http://blog.csdn.net/u010097644/article/details/56849758

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

推薦閱讀更多精彩內容