NDK使用OpenCV2.4.2本地代碼

本文講述Android NDK中使用OpenCV2.4.2的詳細過程(不使用OpenCV的java封裝)

1. 前期準備:

a. 下載 opencv-android-sdk,解壓;(或者可以從OpenCV源代碼自己編譯,先設置ANDROID_NDK變量,然後使用cmake -DCMAKE_TOOLCHAIN_FILE=...,即可編譯arm平臺下的opencv庫,生成的文件同下載的android-sdk是一樣的)

b. 配置好Android開發環境和NDK環境;

 

2. 開始整合:

a. 新建android工程,聲明native方法,生成頭文件,創建cpp源文件:    

#include "com_tristan_first_demo_Util.h"

#include <opencv2/opencv.hpp>

#include <vector>

using namespace std;

using namespace cv;

JNIEXPORT void JNICALL Java_com_tristan_first_demo_Util_test

(JNIEnv *env, jclass object) {

Mat image = imread("/sdcard/lena.jpg");

if (!image.data) {

return;

}

Mat dest(image.size(), image.type());

for (int i = 0; i < image.rows; i++) {

for (int j = 0; j < image.cols; j++) {

for (int c = 0; c < 3; c++) {

dest.at<Vec3b>(i,j)[c] = saturate_cast<uchar>(5 * image.at<Vec3b>(i,j)[c] + 50);

}

}

}

vector<int> parameters;

parameters.push_back(CV_IMWRITE_JPEG_QUALITY);

parameters.push_back(100);

imwrite("/sdcard/out.jpg", dest, parameters);

}

      這個文件的作用是讀取sdcard上的lena.jpg文件,調節對比度和亮度後輸出out.jpg文件

b. jni目錄下創建Application.mk文件:

APP_STL := gnustl_static

APP_CPPFLAGS := -frtti -fexceptions

CPU_ABI := armeabi

c. jni目錄下創建Android.mk文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

OPENCV_LIB_TYPE := static

# 此路徑爲android-sdk中OpenCV.mk的絕對路徑

include /Users/tristan/Tools/opencv-2.4.2-android-sdk/sdk/native/jni/OpenCV.mk

LOCAL_MODULE := test

LOCAL_SRC_FILES := test.cpp

include $(BUILD_SHARED_LIBRARY)

d. 編譯,運行,便可正常生成文件out.jpg,打開發現圖片已經處理過了

e. 上面一種方式爲靜態鏈接opencv,如果要動態鏈接的話,將OPENCV_LIB_TYPE改爲shared,默認值即爲shared,不過修改發現,shared和static的處理方式是一樣的。。。都是把opencv各個模塊的一堆.a文件打到要生成的so中,囧。。。

工程示例和配置可參見opencv-android-sdk sample的tutorial-4-mixed項目


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章