Android开发:安装NDK,移植OpenCV2.3.1,JNI调用OpenCV全过程

接下来就是配置。事实上有两种方法在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)endifLOCAL_MODULE := ImgFun LOCAL_SRC_FILES := ImgFun.cpp include $(BUILD_SHARED_LIBRARY)

再新建一个Application.mk, 内容输入:

APP_STL:=gnustl_staticAPP_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, 会生成相应的库。具体的大家下载源程序把!下载连接:

【注,下载后将文件解压。然后eclipse里,切换到TestOpenCV空间,,点File–import,就可以了。首先测下最后一步,也就是输入ndk-build, 会不会生成相应的库!】

参考:

往往教导我们大家要好好学习天天向上,要永不言弃坚持到底百折不挠宁死不屈,

Android开发:安装NDK,移植OpenCV2.3.1,JNI调用OpenCV全过程

相关文章:

你感兴趣的文章:

标签云: