多语言展示
当前在线:1667今日阅读:176今日分享:34

如何使用NDK开发opencv ndroid平台应用

OpenCV是计算机界屈指可数的计算机视觉库,即使开发商业应用也是首选,毕竟是开源的。在windows 平台上,opencv SDK能够使用寥寥几行代码就可建立opencv应用,但是在Android平台上实属不易,最近release的opencv4android SDK 3.0还加入了opencv manager package,想将opencv静态链接进工程应用中,且用NDK 基于c/c++开发就难上加难,笔者花了2周时间静下心来研究这些,将来龙去脉了解清楚并实际建立成功应用后写下此文,希望后来者能够免费一番周折。
方法/步骤
1

首先搭建基于NDK的jni开发环境,再次不在累述,请参考另一篇经验。从官方下载OpenCV4Android SDK 3.0 开发包,并将该包解压。

2

解压opencv4android 包选择file->import->Android->Existing Android code into workplace

3

浏览opencv 目录,导入所有工程,注意勾选“Copy projects into workspace”Copy openCV目录下SDK文件夹到工作区中

4

修改工程Tutorial 1  ->user SDK版本, 根据测试手机设置此版本,设置>=11即可

5

设置tutrorial 1 工程文件属性,加入opencv library

6

编译并运行apk, 手机能运行程序,但是会报package not found,这是因为程序依赖的文件没有安装,类似windows平台下找不到dll文件一样,这些依赖包在opencv目录apk目录下,安装对应平台的apk即可,但是这样动态链接给安装带来不便,以下介绍静态链接,把所需文件打包在一起。幸运的是,这一步在oepncv 目录下产生库文件opencv library - 3.0.0.jar

7

设置工程属性,Java build path->Libraries->Add jars,执行了这一步操作,工程文件中会出现opencv library

8

修改AndroidMainifest.xml文件,加入     这里是设置应用程序的权限,接下来因为涉及文件操作,设置存储器访问权限,如要设置camera,可按照上述设置。

9

在Jni目录下 增加Application.mk文件,加入内容为,#APP_STL :=  gnustl_static#APP_CPPFLAGS := -frtti –fexceptionsAPP_ABI := armeabi-v7a

10

同时修改Android.mk文件为:此配置选项是设置Opencv头文件路径,库文件连接方式,编译源文件及生成的库文件。LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)OPENCV_LIB_TYPE:=STATICOPENCV_INSTALL_MODULES:=oninclude C:\Users\admin\workspace\sdk\native\jni\OpenCV.mkLOCAL_MODULE    := HelloLOCAL_LDLIBS +=  -llog -ldlLOCAL_SRC_FILES := Hello.cppinclude $(BUILD_SHARED_LIBRARY)

11

修改hello.cpp文件//加入头文件#include #include #include #include using namespace cv;jstring JniString(JNIEnv* env) {return env->NewStringUTF('Hello,NDK');}extern 'C'{JNIEXPORT jstring JNICALL Java_com_example_hello_MainActivity_stringFromJNI(JNIEnv* env,jobject o){ 完整代码如下:

12

向手机中丢入一个图片文件,路径为/storage/emulated/0/1.jpg编译运行,have fun.在应用程序中点击button, 将文件/storage/emulated/0/out.txt取出,查看文件内容为: Hello,image size=1920 x 1200这说明opencv已经正确加载,并执行opencv库中函数,另外,此时opencv是静态编译到应用程序中的。如对读者有帮助,欢迎投宝贵一票,谢谢!

推荐信息