Android开发OpenCV2.4.10环境配置(免Cygwin)-后篇

之前讲的只是Android通过JNI接口调用自定义的C/C++函数,接下来我们需要调用的是OpenCV的库函数。

Step1:下载OpenCV-2.4.10-android-sdk。

下载之后解压缩至自定义目录即可,例如:D:\00_dev\OpenCV-2.4.10-android-sdk。


Step2:在Android.mk文件中包含OpenCV-2.4.10-android-sdkOpenCV.mk。并添加相关配置信息。


下面逐一解释一下各参数:

1-OPENCV_INSTALL_MODULES:=on 自动依赖OpenCV的so库,主要是libopencv_java.so;

2-OPENCV_CAMERA_MODULES:=off 表示无需将带camera的so拷贝至工程下的libs文件夹下;

3-OPENCV_LIB_TYPE:=STATIC 使用静态的OpenCV库。

4-includeD:\AndroidSoftwares\OpenCV-2.4.10-android-sdk\sdk\native\jni\OpenCV.mk opencv4android中包含了opencv.mk这样的一个make文件,这个文件对于编译本地opencv代码是非常重要的,如果你不想用opencv4androidSDK,但是也要把这个SDK中的opencv.mk这个文件复制到你的opencv目录或者其他目录,将来在 Android程序中配置NDK本地编译的时候需要使用这个文件。非常重要。

关于这些参数的设置,可以进一步参考网址:

http://blog.csdn.net/yanzi1225627/article/details/27863615

Step3:配置Application.mk。

Application.mk描述了应用程序需要哪些动态库和静态库。常用设置如下:

APP_STL :=gnustl_static

APP_CPPFLAGS := -frtti -fexceptions

APP_ABI :=armeabi-v7a

APP_PLATFORM :=android-8

至于为什么这样设置,留待以后深入研究。

Step4:设置C/C++路径。

此时的路径可以参见opencv Sample 下的project的设置。projectproperties->c/c++ general->paths and Symbol->include->includedirectories,然后ADD几个必要的路径(以后也可根据需要再添加),其中NDKROOT= D:\AndroidSoftwares\android-ndk-r10:

1-${NDKROOT}/platforms/android-9/arch-arm/usr/include[包含<jni.h><math.h><string.h>]

2-${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/include
3-${NDKROOT}/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/include

以上两个包含C++的相关头文件,例如<string>

4-${ProjDirPath}/../../sdk/native/jni/include或绝对路径D:\AndroidSoftwares\OpenCV-2.4.10-android-sdk\sdk\native\jni\[包含opencvopencv2]

如下图:


有时,系统也会自动为我们添加其他版本的路径,如下图:


至此,Opencv android project配置完毕,Opencv 的native库就可以用了。

Step5:在NativeFunctions中新增一个native方法。


Step6:在命令提示符窗口中键入命令,生成包含JNI接口方法声明的文件。



Step7:将上一步新生成的JNI接口声明拷贝到jni目录下,并重命名为HelloOpenCV.h。


Step8:在HelloOpenCV.cpp中编写函数实现体。

首先,包含头文件HelloOpenCV.h。

在编写函数体时,根据需要也许加入相应的头文件。

例如,添加Matin = imread("/sdcard/lena.jpg");这一句代码前,要事先包含

#include <opencv2/opencv.hpp>

usingnamespacecv;

再如,添加Canny(in,out,150,220); 这一句代码前,要事先包含

#include <opencv2/imgproc/imgproc.hpp>


注意:这里涉及到sdcard的读写,因此要再AndroidManifest.xml文件中添加权限。

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Step9:在Activity中调用该本地方法。


Step10:运行程序。


Step11:遇到的问题及解决方案。

1-若JNI编译通过,而项目仍然有错时,需切换到Eclipse的控制台查看错误信息,若出现conversion to dalvik format failed with error 1的错误,解决方案是清空bin、libs、obj等目录后重新编译,或删除多余的jar包。

也可参考网址:

http://stackoverflow.com/questions/11807893/occasionally-conversion-to-dalvik-format-failed-with-error-1

http://www.tuicool.com/articles/uqMr6r



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值