開發環境:Fedora14 , 操作中以root權限操作,這年頭Android移植上OpenCV就強大了,可以做很多復雜的視頻分析、圖像處理工作了!如火災、人臉、視頻行為的分析等。歡迎Android OpenCV愛好者,加入OpenCV4Android聯盟群:66320324。備注:yanzi
**一:NDK的安裝**
??? 首先是安裝NDK,安裝之前需要安裝CDT,具體的參照[http://blog.csdn.net/yanzi1225627/article/details/7736364](http://blog.csdn.net/yanzi1225627/article/details/7736364)這里來完成。這里再詳細記錄下NDK的安裝過程。google下載NDK,也可以點擊這里下載:http://download.csdn.net/detail/yanzi1225627/5015893,下載后輸入tar -jxvf android-ndk-r8-linux-x86.tar.bz2 -C /usr/local/android/將其解壓到/usr/local/android/ 目錄。『注,我的android相關文件都安裝在這里。這個目錄不是死的。』然后gedit /etc/profile,在里面添加:export PATH=$PATH:/usr/local/android/android-ndk-r8,從安裝JDK到eclipse, android, NDK,在/etc/profile文件里,添加的命令一共有如下三條:
export JAVA_HOME=/usr/local/android/jdk1.7.0_04
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:/usr/local/android/android-ndk-r8
只要這三條就行了。然后source /etc/profile? 使剛才的設置生效。
在終端里輸入:ndk-build,可以測試出ndk安裝成功了么有。
?? 注:有的時候也可以通過在線安裝方式,在eclipse里點help-install new software,網址輸入這個:ADT - https://dl-ssl.google.com/android/eclipse/,也會看到安裝NDK Plugins, 如果經過上面的步驟,NDK不能用就把這個也裝上。 但如果只裝這個,好像不中,找不到ndk安裝的目錄,也無法配置路徑。
**二:OpenCV的移植**
???? 這里的移植不是像在qt下那么麻煩,這是因為OpenCV退出來直接支持Android的版本,所以不需要自己編譯。直接下下來,解壓縮就可以了。我用的OpenCV2.3.1,需要的可以直接到csdn資源里下載,鏈接:[http://download.csdn.net/detail/yanzi1225627/5013701](http://download.csdn.net/detail/yanzi1225627/5013701),也可以自己到sourceforge上下載,鏈接:http://sourceforge.net/projects/opencvlibrary/files/opencv-android/,從這里可以看出從OpenCV2.3開始就有編譯好的android版本。最新的是2.4.3版本,在2012年12月24發布的。牛逼阿!
?? 接下來就是配置。事實上有兩種方法在Android里調用OpenCV,一種是使用OpenCV java Api,一種是通過JNI的方式。這里是針對后者。將OpenCV-2.3.1-android-bin.tar.bz2解壓縮,然后將里面的OpenCV-2.3.1拷貝到Eclipse工作空間的平級目錄。圖示:

?????? 為此,我們現先建一個工作空間。新建文件夾/home/yan/TestOpenCV,點eclipse里的File---Switch workspace---other,選中這個目錄。切換到這個工作空間后,點Window---Preference--android,選中自己的android-sdk的安裝目錄,我的是:/usr/local/android/android-sdk-linux。然后就可以在這個工作空間里正常android開發了,如果不設置這個,新建的工程全是紅叉叉。
???? 新建一個項目HaveImgFun,包名是package com.testopencv.haveimgfun; 然后將剛才解壓縮出來的**OpenCV-2.3.1-android-bin\samples"下的includeOpenCV.mk文件拷貝到和項目HaveImgFun同一級目錄**中。圖示:

在 eclipse里選中那個項目,新建一個文件夾jni,然后新建文件:Android.mk,里面的內容是:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include ../includeOpenCV.mk
ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
#try to load OpenCV.mk from default install location
include $(TOOLCHAIN_PREBUILT_ROOT)/user/share/OpenCV/OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE??? := ImgFun
LOCAL_SRC_FILES := ImgFun.cpp
include $(BUILD_SHARED_LIBRARY)?
再新建一個Application.mk, 內容輸入:
APP_STL:=gnustl_static
APP_CPPFLAGS:=-frtti -fexceptions
APP_ABI:=armeabi armeabi-v7a
然后新建一個cpp文件,ImgFun.cpp, 這個測試程序是將一個圖片的上半部分弄黑,然后復原。具體的大家看源碼。功能很簡單。
內容是:
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <opencv2/opencv.hpp>
using namespace cv;
extern "C" {
JNIEXPORT jintArray JNICALL Java_com_example_haveimgfun2_LibImgFun_ImgFun(
??? ?JNIEnv* env, jobject obj, jintArray buf, int w, int h);
JNIEXPORT jintArray JNICALL Java_com_testopencv_haveimgfun_LibImgFun_ImgFun(
??? ?JNIEnv* env, jobject obj, jintArray buf, int w, int h){
?jint *cbuf;
?cbuf = env->GetIntArrayElements(buf, false);
?if(cbuf == NULL)
?{
??? ?return 0;
?}
?Mat myimg(h, w, CV_8UC4, (unsigned char*)cbuf);
?for(int j=0; j<myimg.rows/2; j++)
?{
??? ?myimg.row(j).setTo(Scalar(0, 0, 0, 0));
?}
?int size=w*h;
?jintArray result = env->NewIntArray(size);
?env->SetIntArrayRegion(result, 0, size, cbuf);
?env->ReleaseIntArrayElements(buf, cbuf, 0);
?return result;
}
}

??? 然后在終端里切換到HaveImgFun目錄,也就是在目錄/home/yan/TestOpenCV/HaveImgFun下, 終端輸入**ndk-build**, 會生成相應的庫。
具體的大家下載源程序把!下載連接:[http://download.csdn.net/detail/yanzi1225627/5016365](http://download.csdn.net/detail/yanzi1225627/5016365)
【注,下載后將文件解壓。然后eclipse里,切換到TestOpenCV空間,點File--import,就可以了。首先測下最后一步,也就是輸入ndk-build, 會不會生成相應的庫!】
參考:[http://www.cnblogs.com/ldr213/archive/2012/02/20/2359262.html](http://www.cnblogs.com/ldr213/archive/2012/02/20/2359262.html)
- 前言
- Linux下使用QT調用opencv讀取攝像頭視頻 調試心得
- Android開發 攝像頭SurfaceView預覽 背景帶矩形框 實現(原理:雙surfaceview,頂層畫矩形框,底層預覽視頻)
- Android開發:安裝NDK,移植OpenCV2.3.1,JNI調用OpenCV全過程
- 2013新春奉送:Android攝像頭開發完美demo---(循環聚焦,縮放大小,旋轉picture,查詢支持的picturesize, ImageButton按鍵效果)
- 如何設置ImageButton按鍵按下去后的 特效----(如類似風車旋轉的動畫特效)
- Android攝像頭:只拍攝SurfaceView預覽界面特定區域內容(矩形框)---完整實現(原理:底層SurfaceView+上層繪制ImageView)
- Android開發:SurfaceView上新建線程繪制旋轉圖片 及 刷新特定區域(臟矩形)
- Android開發:ImageView上繪制旋轉圓環(透明度不同的旋轉圓環,利用canvas.drawArc實現)
- Android上掌紋識別第一步:基于OpenCV的6種膚色分割 源碼和效果圖
- Android開發:實時處理攝像頭預覽幀視頻------淺析PreviewCallback,onPreviewFrame,AsyncTask的綜合應用
- Android攝像頭開發:拍照后添加相框,融合相框和圖片為一副 圖片
- Android(OpenCV) NDK開發: 0xdeadbaad(code=1)錯誤 及 關閉armeabi和libnative_camera_r2.2.2.so的生成
- Android攝像頭開發:實時攝像頭視頻預覽幀的編碼問題(二)
- setContentView切換頁面(無需每次都findViewById)-----二
- Android開發:setContentView切換界面,自定義帶CheckBox的ListView顯示SQlite條目-----實現