您的位置:首页 > 编程语言 > Java开发

Android+Opencv+Eclipse+NDK环境搭建

2014-02-28 22:36 429 查看
《不懂之处可参考http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html

一、首先下载所用的资源

Opencv-android-sdk:地址可以去官网上下载,http://sourceforge.net/projects/opencvlibrary/files/opencv-android/

只不过有点慢,这里有一个下载地址,是一个网盘
http://pan.baidu.com/wap/link?uk=1057195248&shareid=4038639114&third=0ss
Android-NDK:
可以去官网下载,https://developer.android.com/tools/sdk/ndk/index.html

或者去http://dl.dbank.com/c0v9ubaffo

二、配置Eclipse

将下载好的压缩包解压缩到没有中文没有空格的路径上去。

打开eclipse->window->Preferences->Android->NDK:右侧出现NDK location:浏览至你的NDK解压缩的路径并点击应用(Apply)。



同时将NDK所在的路径添加至系统path中,方便以后命令行操作。

三、工程开发时的配置:

在android中使用opencv有两种方式,一种是使用JAVA API,一种是使用混合编程,java语言调用C++语言编译的库文件,使用JNI 编程。

四、使用Java API:

首先在开发时导入opencv的库,在文件中-》导入-》Android->existing android code to workspace.-》浏览你的opencv sdk 所在的目录,进入sdk/java/,导入opencv的库。



接着在你的工程上点击右键->属性-》android:下面有个 add ,点击加载opencv的库,最后应用。



此时使用Android 的JAVA API,已经可以开发了,一般包的形式为

org.opencv.OpenCV模块名).(OpenCV类名)

此时使用opencv 库要注意,opencv库的连接形式有两种:一种是异步连接,一种是静态连接

1:异步连接:

代码中应注意在活动中要添加一个BaseLoaderCallback 的成员并实例化,同时实现重载onResume,如下图所示

public class Sample1Java extends Activity implements CvCameraViewListener {

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};

@Override
public void onResume()
{
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);
}

...
}

2:静态连接:

将所需要的库从

<OpenCV-2.4.8-androidsdk>/sdk/native/libs/<target_arch>中直接复制到自己工程的libs/<target_arch>下面。

若含有JNI成分,看下文如何生成并修改android.mk。最后在活动类中加入以下代码:

static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}

若需要加载其他库则:

static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
} else {
System.loadLibrary("my_jni_lib1");
System.loadLibrary("my_jni_lib2");
}
}

剩下的就是自己写代码了

注:apk 生成之后安装到手机之后若不能运行,手机还需下载opencv manager.apk。

五、使用JNI:

前期仍像使用java api 一样将opencv导入并加载。接下来是不同之处:

首先添加本地支持:在工程上右键点击android tools -》ddnative support



这时出现了添加的库的名称的对话框,写个名字即可:



点击finish。之后刷新工程,你会发现工程下面出现了新的东西。



在项目中多了一个“jni”文件夹,该文件夹这时候多出了两个文件,如本程序中多了“ImgProcess.cpp”和“Android.mk”

修改android.mk:如下

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_LIB_TYPE:=STATIC
ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
#try to load OpenCV.mk from default install location
#注意下面的根据自己的情况修改
include E:\java\OpenCV-2.4.5-android-sdk\sdk\native\jni\OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE := ImgFun
LOCAL_SRC_FILES := ImgFun.cpp
include $(BUILD_SHARED_LIBRARY)
同时在JNI文件夹下添加Application.mk

内容如下:

APP_STL:=gnustl_static
APP_CPPFLAGS:=-frtti -fexceptions
APP_ABI:=armeabi armeabi-v7a

接下来是一些eclipse的配置:

首先在工程属性中,在“C/C++ Build”下的“Tool Chain Editor”中选择android GCC



C/C++ Build的Builder Settings"中配置"Build command:"直接输入ndk-build



在“Behaviour”中设置



此时还需要配置javah外部工具方法如下:



最后一行字为:-v -classpath "${project_loc}/bin/classes" -d "${project_loc}/jni" ${java_type_name}



下一步:
打开工程性属,Project Properties -> C/C++ General -> Paths and Symbols




添加include directorires 时注意选择
add to all configurations
add to all languages

最后注意api版本不要低于14

至此环境已经配好了,至于如何使用则请关注下一篇博文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: