opencv集成opencv_contrib編譯生成Android工程

1.目標(biāo)和步驟

(1)環(huán)境搭建

(1.1)ndk環(huán)境---走進(jìn)AndroidStudio下的NDK?

? ? 問題1:發(fā)現(xiàn)mk文件沒有自動(dòng)生成(如果不想手動(dòng)寫mk,可以做如下替換)

? ? 在項(xiàng)目的主目錄下./build.gradle替換build tools,使用gradle-experimental端幼,如下

? ? classpath"com.android.tools.build:gradle-experimental:0.7.0-alpha4"

? ? 替換插件

? ? 在gradle中不能再使用com.android.application了概耻,需要使用com.android.model.application替代睛榄。

? ?在項(xiàng)目主目錄下的./app/build.gradle中更改plugin

? ? apply plugin: “com.android.model.application”

? ? 相應(yīng)的gradle配置的依賴版本要改成2.10.0

? ? 可以參考 http://android.jobbole.com/83431/,但是我不想改我的gradle版本

我的解決方法:手工執(zhí)行命令經(jīng)行編譯,學(xué)習(xí)一下mk

在使用手工編譯(C/C++)文件之前返十,我們要回到文章開頭部分彭谁,我們需要配置好系統(tǒng)環(huán)境變量,這樣我們才能在系統(tǒng)環(huán)境下執(zhí)行ndk相關(guān)編譯命令共虑,如果您的環(huán)境變量還沒有配置愧怜,那么可以參考下文章開頭部分,如果已經(jīng)做好這部分工作妈拌,那么咱們繼續(xù)拥坛。

接下來蓬蝶,我們還要?jiǎng)?chuàng)建如下兩個(gè)文件:Android.mk 和 Applicatoin.mk (非必要)

創(chuàng)建Android.mk

Android.mk文件用來指定源碼編譯的配置信息,例如工作目錄猜惋,編譯模塊的名稱丸氛,參與編譯的文件等,大致內(nèi)容如下:

LOCAL_PATH:=? $(call my-dir)include$(CLEAR_VARS)LOCAL_MODULE:=? hello_jniLOCAL_SRC_FILES:=? hello_jni.cinclude$(BUILD_SHARED_LIBRARY)

LOCAL_PATH:設(shè)置工作目錄著摔,而my-dir則會(huì)返回Android.mk文件所在的目錄缓窜。

CLEAR——VARS:清除幾乎所有以LOCAL——PATH開頭的變量(不包括LOCAL_PATH)。

LOCAL_MODULE:用來設(shè)置模塊的名稱谍咆。

LOCAL_SRC_FILES:用來指定參與模塊編譯的C/C++源文件名禾锤。

BUILD_SHARED_LIBRARY:作用是指定生成的靜態(tài)庫或者共享庫在運(yùn)行時(shí)依賴的共享庫模塊列表。

創(chuàng)建Application.mk

這個(gè)文件用來配置編譯平臺(tái)相關(guān)內(nèi)容摹察,我們最常用的估計(jì)只是APP_ABI字段恩掷,它用來指定我們需要基于哪些CPU架構(gòu)的.so文件,當(dāng)然你可以配置多個(gè)平臺(tái):

APP_ABI := armeabi armeabi-v7a x86 mips

如果不創(chuàng)建Application.mk文件供嚎,那么手動(dòng)編譯的.so文件只有armeabi平臺(tái)一個(gè)版本黄娘,其他平臺(tái)的不會(huì)被編譯。

假設(shè)我們配置好了Android.mk文件克滴,那么接下來我們就可以執(zhí)行如下命令來生成.so文件了寸宏,我們假設(shè)開發(fā)NDK的目錄為默認(rèn)目錄:

cdsrc/main/jni/ndk-build

如果順利,那么你將會(huì)看到偿曙,在src/main/目錄下會(huì)多了一個(gè)libs目錄氮凝,這是NDK使用命令編譯.so文件的生成的默認(rèn)目錄,而AndroidSutdio默認(rèn)加載NDK的目錄是jniLibs望忆,那么你有兩種解決方式:

配置build.gradle資源目錄罩阵,參見文章2.1小節(jié)

使用ndk-build NDK_LIBS_OUT=../jniLibs指定具體的輸出目錄

當(dāng)你得到了.so文件,那么接下來就是在java文件中調(diào)用執(zhí)行即可启摄,如果想了解更多ndk-build命令內(nèi)容稿壁,可參見:Android ndk-build 使用文檔


(1.2)opencv環(huán)境?

Android Studio集成OpenCV

這篇文章基本能解決大部分問題

Android開發(fā)配置opencv環(huán)境超詳細(xì)教程

這篇文章絕對(duì)手把手教會(huì)

Android Studio中通過CMake使用NDK并編譯自定義庫和添加預(yù)編譯庫

介紹了用CMake構(gòu)建的方法,用的版本和庫比較新

? ? 到了這一步歉备,應(yīng)該都能成功的配置出NDK環(huán)境并在上面使用opencv的接口傅是。



2.編譯Opencv源碼及生成android工程

經(jīng)過上面的步驟可以完成openCV環(huán)境的搭建,用C/C++或者java開發(fā)OpenCV的程序沒什么大問題了蕾羊,基于的庫是openCv的主干版本喧笔,問題是我們想加入擴(kuò)展包的物體追蹤的內(nèi)容構(gòu)建。

openCV的擴(kuò)展包地址如下:

https://github.com/opencv/opencv_contrib

如何將擴(kuò)展包和主干編譯到一起龟再,我到開源庫中提了問題

看到在官方的構(gòu)建中是有將opencv和contrib工程集體打包的構(gòu)建书闸,但是并沒有公開出來,然并卵利凑!

在本地如何整體編譯浆劲,有這個(gè)問題可以得到解答嫌术。

按照tzutalin那個(gè)哥們說法:(2)中build-opencv-for-android這個(gè)可以解決問題。估計(jì)在linux平臺(tái)上是可以的牌借,我這里用的是

mac度气,編譯會(huì)遇到各種坑,最后采用的是(1)中的方法

(1)下載opencv源碼和opencv_contrib源碼

? ? midir opencvProject

? ? cd opencvProject/

? ? git clone https://github.com/opencv/opencv_contrib.git

? ? git clone https://github.com/opencv/opencv.git

(2)用Cmake進(jìn)行編譯

? ? 額沒有下載cmake, 先下載安裝cmake, 推薦使用brew工具下載安裝

? ? cd opencv

? ? mkdir release

? ? cd ?release

? ? cmake -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/CMAKE_BUILD_TYPE=RELEASE - ? ?DCMAKE_INSTALL_PREFIX=/usr/local ..

? ? make -j8

? ? sudo make install

? ? 等吧膨报,我們不缺時(shí)間不要優(yōu)化

(3)編譯生成Android工程

? ? 回到opencvProject這個(gè)目錄蚯嫌,看到里面有下好了的倆個(gè)工程opencv和opencv_contrib

? ? 下載這位哥寫好的腳本進(jìn)行編譯

? ? git clone https://github.com/tzutalin/build-opencv-for-android.git

? ? ./build-android-opencv.sh

? ? 編譯的時(shí)候遇到一個(gè)錯(cuò)誤,readlink: illegal option -- f丙躏,解決方案是這篇文章

然后把腳本中的readlink改為greadlink择示,

### ABIs setup中把a(bǔ)rmeabi-v7a with NEON加上,這樣可以生成不同系統(tǒng)對(duì)應(yīng)的so庫

declare -a ANDROID_ABI_LIST=("x86" "x86_64" "armeabi" "armeabi-v7a with NEON")

再次運(yùn)行晒旅,OK了

3.使用

編譯出來生成android_opencv的文件夾工程栅盲,使用方法和2種講的一致。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末废恋,一起剝皮案震驚了整個(gè)濱河市谈秫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鱼鼓,老刑警劉巖拟烫,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異迄本,居然都是意外死亡硕淑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門嘉赎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來置媳,“玉大人,你說我怎么就攤上這事公条∧茨遥” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵靶橱,是天一觀的道長寥袭。 經(jīng)常有香客問我,道長关霸,這世上最難降的妖魔是什么传黄? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮谒拴,結(jié)果婚禮上尝江,老公的妹妹穿的比我還像新娘。我一直安慰自己英上,他們只是感情好炭序,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苍日,像睡著了一般惭聂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上相恃,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天辜纲,我揣著相機(jī)與錄音,去河邊找鬼拦耐。 笑死耕腾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杀糯。 我是一名探鬼主播扫俺,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼固翰!你這毒婦竟也來了狼纬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤骂际,失蹤者是張志新(化名)和其女友劉穎疗琉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歉铝,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盈简,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了太示。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片送火。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖先匪,靈堂內(nèi)的尸體忽然破棺而出种吸,到底是詐尸還是另有隱情,我是刑警寧澤呀非,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布坚俗,位于F島的核電站,受9級(jí)特大地震影響岸裙,放射性物質(zhì)發(fā)生泄漏猖败。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一降允、第九天 我趴在偏房一處隱蔽的房頂上張望恩闻。 院中可真熱鬧,春花似錦剧董、人聲如沸幢尚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尉剩。三九已至真慢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間理茎,已是汗流浹背黑界。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皂林,地道東北人朗鸠。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像础倍,于是被迫代替她去往敵國和親烛占。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android游戲開發(fā)實(shí)踐(1)之NDK與JNI開發(fā)02 承接上篇Android游戲開發(fā)實(shí)踐(1)之NDK與JNI...
    AlphaGL閱讀 3,755評(píng)論 0 24
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,288評(píng)論 25 707
  • 朋友著隆,你一定知道山溝這個(gè)概念扰楼,或許你就在某個(gè)山溝。我要告訴你的是一個(gè)中國西部荒山禿嶺中的世外桃源~官鵝溝美浦。 官鵝溝...
    lhyyj閱讀 1,519評(píng)論 0 0
  • 最近這幾天特別的冷弦赖,人們穿著厚厚的大衣,早上上班打卡浦辨,然后就匆匆往辦公樓里鉆蹬竖,很少出來。 而這個(gè)男人大約四十多歲的...
    風(fēng)鈴草_LYF閱讀 973評(píng)論 20 35
  • 你以為我貧窮流酬、相貌平平就沒有感情嗎币厕?我向你發(fā)誓,如果上帝賦予我財(cái)富和美貌芽腾,我會(huì)讓你無法離開我旦装,就像我現(xiàn)在無法離...
    龍蝶縈閱讀 230評(píng)論 0 0