NDK使用OpenCV2.4.2本地代碼

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

1. 前期準備:android

a. 下載 opencv-android-sdk,解壓;(或者能夠從OpenCV源代碼本身編譯,先設置ANDROID_NDK變量,而後使用cmake -DCMAKE_TOOLCHAIN_FILE=...,便可編譯arm平臺下的opencv庫,生成的文件同下載的android-sdk是同樣的)c++

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

 

2. 開始整合:.net

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

#include "com_tristan_first_demo_Util.h"開發

#include <opencv2/opencv.hpp>get

#include <vector>android-sdk

using namespace std;it

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項目

相關文章
相關標籤/搜索