深入OpenCV Android应用开发 中文版 – 第六章代码更新

本书中文版链接:京东  当当

英文原版链接:亚马逊《Mastering OpenCV Android Application Programming》


        原书所给代码以章为单位,针对的Android版本从API 19到API 21不等,同时使用的OpenCV库版本也有2.4.9和2.4.10两种。本文给出的代码是在原书代码的基础上,针对Android 7.0(API 24)与OpenCV 3.2进行了修改,适当地修改了一些操作,以使代码整体上更合理。

        原书的完整代码可以在这里获取:https://www.packtpub.com/lcode_download/22299

        更新后的代码托管在GitHub:https://github.com/johnhany/MOAAP/tree/master/MOAAP-Chp6-r3

        关于在Android Studio上配置OpenCV开发环境的方法,请参考《在Android Studio上进行OpenCV 3.1开发》

        关于在Android Studio上利用CMAKE配置OpenCV NDK开发环境的方法,请参考《Android Studio 2.3利用CMAKE进行OpenCV 3.2的NDK开发》

        本章介绍如何在Android Studio 2上利用OpenCV 3.2的Java API和Native API,通过Android NDK r15b开发一个图像拼接应用,涉及特征检测与匹配、图像匹配、光束平差法、自动校直、增益补偿、多频段融合等知识。但我们的应用只需要在C++部分调用OpenCV的Stitcher就可完成整个拼接过程。关于以上各算法的原理可以参考《深入OpenCV Android应用开发》第六章。


开发环境

        Windows 10 x64专业版

        Android Studio 2.3.3(Gradle 3.3,Android Plugin 2.3.3)

        Android 7.0(API 24)

        Android NDK r15b

        JDK 8u141

        OpenCV 3.2.0 Android SDK


代码及简略解释

        1. 创建Android Studio项目,包命名为net.johnhany.moaap_chp6。注意我们需要建立一个NDK项目,所以需要勾选Include C++ Support。导入OpenCV-android-sdk\sdk\java到项目中,并为app模块加载模块依赖。

        2.app\src\main\java目录中找到net.johnhany.moaap_chp6包,为MainActivity.java添加如下代码:

        原书给出的代码是保留一个空的MainActivity,创建一个StitchingActivity,然后所有的操作在StitchingActivity当中执行。我这里改为全部Java操作只在MainActivity中执行。另外,Java层与Native层之间图像数据的传递方式也产生了一些变化。而且,原书所给代码只提供了一个用于载入图像的菜单按钮,并没有实际提供对从内存中读取的图像进行拼接的功能。我修改为即可以通过摄像头拍照进行拼接,也可以通过读取已有图像的方式来拼接。

        3. 修改app\src\main\res\layout\activity_main.xml内容如下:

        4. 修改app/CMakeLists.txt内容如下:

        关于该文件中各项的含义,请参考《Android Studio 2.3利用CMAKE进行OpenCV 3.2的NDK开发》。另外,我这里引用的是包含opencv_contrib模块的OpenCV Android SDK,其实直接引用官方预编译SDK也可。

        5. 将项目默认产生的app\src\main\cpp\native-lib.cpp文件更名为stitcher.cpp,然后将文件内容修改为:

        6. 在app\src\main\res目录下创建一个名为menu的Andorid resource directory,再在res\menu中创建一个menu_main.xml文件:

        7. 修改app\src\main\res\values\strings.xml文件:

        8. 修改app\src\main\res\AndroidManifest.xml文件为如下内容:

        9.app\build.gradle文件修改为:

        同样地,这里引用的是包含opencv_contrib模块的OpenCV Android SDK,读者可以直接引用官方预编译SDK。

        10. openCVLibrary320\build.gradle文件修改为:

        11. 检查一下项目根目录的build.gradle文件是否为如下内容:


运行效果

        测试图片来自https://github.com/opencv/opencv_extra/tree/master/testdata/stitching

        原始图片:

        拼接后的效果:

您将是第一位评论人!

订阅评论
wpDiscuz