OpenCV学习笔记(四)—— OpenCV for Android移植到Android平台

来源:互联网 发布:大数据技术 原理 编辑:程序博客网 时间:2024/05/11 04:22

        如今,大部分的AR都是基于移动设备的,所以这里我们尝试在Android中调用OpenCV的功能来做一些相关的测试。由于OpenCV是基于C语言和部分C++语言开发的,而Android开发使用的则是Java,那么如何才能在Java中调用OpenCV库中的类或者代码呢?这就需要借助于JNI了,不过在使用JNI之前,我们首先要先配置好开发环境。


一、工具:

1.Eclipse:包含JDK、SDK、IDE、CDTNDK和ADT插件,也就是在android软件开发环境配置完成之后再加上NDK和CDT插件,在这里我只简单说一下NDK的配置过程:

    下载NDK安装包,这里我是在云盘下载的,因为官方链接非常不稳定,我使用的是ndk-r9的版本

       

        解压压缩包到指定目录下面,然后打开eclipse编辑器,工具栏中Window—>Preferences:

        

        注意NDK的路径不能包含空格!!!假如配置NDK后遇到更多的问题可以参考:http://www.bkjia.com/Androidjc/934212.html

2.OpenCV for Android插件包:到OpenCV的官方网站(http://opencv.org/)下载android专用版的OpenCV资源包

       下载之后得到压缩包:,加压压缩包并得到SDK文件:

      

        这些目录分别存放的文件:

apk:使用了opencv库的android程序管理包,这个需要按照你手机的实际芯片情况来选择相应版本手工安装,除非你可以连接上google play自动安装;

samples:一些简单的案例apk及其工程源码

sdk:最为关键的目录,包含OpenCV android开发用到的API和库文件


二、安装配置:

1.将OpenCV库导入Eclipse中:Eclipse中选择工具栏中的:File —>Import...,然后选择General—>Existing Projects into Workspace:

       

    选择刚刚解压出来的OpenCV SDK的根目录,然后导入其中的一个工程:

      

    

    导入的过程中Eclipse就会对导入的项目进行编译,导入成功之后发现一片飘红,那么接下来我们就开始慢慢解决这些错误指导能够成功编译为止。


2. OpenCV Library -3.1.0是其他所有demo的依赖库文件,所以我们优先解决它的问题然后再导入demo进行测试。从错误列表中我们可以看出大部分的错误都是“XXX cannot be revoled to a type”,这个错误其实就是引用了一些未定义的类,考虑到我们还未引入其他第三方的类库,所以导致这个问题的原因只可能是引用android内部类库所引起的,那么显而易见的可以定位到应该是android API版本不匹配的问题。

    选中工程,右键选择Properties(属性),打开属性页面:

    

    选择Android页签,在此处切换工程依赖的Android API版本,进过查询可以定位缺少的API是Android 5.0中新增的,所以我们只要选择5.0或者5.0以上的API版本,即可解决问题:

     


3.解决完上述问题之后,我们可以用相同的办法导入一个demo工程,这里我们也可以将全部demo工程一并导入到Eclipse中:

      

    又红了是不是?不要慌,查看错误列表发现错误都是引用未定义类导致的,这其实是因为每个demo都会引用OpenCV Library -3.1.0库文件,但是此时库文件的路径发生了变化,所以才出现了无法正常引入库文件导致的错误,解决方法很简单,只需要为每个工程重新定位库文件路径到当前库文件路径即可:

    

    删除无效的引用,点击Add重新添加库工程引用:

      


 4.对所有的demo工程进行上述设置之后,发现错误栏的错误剩下两个:

        

        这个错误导致的原因是编译的时候无法找到ndk工具,此时我们需要在属性面板中修改C/C++ Build的一些配置信息,取消使用默认的command:

       

       展开目录选中Environment选项,在其中Add多一个路径参数NDKROOT,参数值为NDK的根路径:

       

5.完成上述操作之后,选择工程右键“clean project”重新编译一次工程,发现错误变成了:

       

       这是因为编译的时候找不到OpenCV SDK中的工具OpenCV.mk所导致的,也就是OpenCV SDK的匹配路径不正确或者是没有匹配,打开当前工程的jni文件夹下的Android.mk文件,这是C/C++编译时使用的配置文件,我们可以看到OpenCV.mk的路径必须为OPENCV_ANDROID_SDK目录下面,或者是与当前工程文件在同一目录下:

        

       所以解决这个问题的方法是:在C/C++ Build的Environment页签再添加一个OPENCV_ANDROID_SDK路径配置常量:

        


三、案例运行:

        完成以上所有配置之后,工程错误全部解决,那么接下来我们需要看看demo是否能正常运行起来,设备连接PC,然后选择工程右键“Run As”然后选中“Android Application”:

        

        出现此提示的原因是OpenCV 2.4.3之后,apk正常运行必须依赖于OpenCV Manager.apk,找到OpenCV android sdk目录下面的apk目录:

        

        这里适用于很多Android硬件设备,这里我选择安装的是armeabi-v7a这个版本的,顺利安装完OpenCV Manager之后,再次重启刚刚的demo,可以正常运行并看到结果如下:

        

1 0