这两篇日志源代码位置:
上文中,test.cpp可以看作是项目的UI部分。实际调用OpenCv实现功能的代码是cameraTest.h和cameraTest.cpp
本文我们将把UI实现从Windows平台替换成Android平台,功能实现则不变。由此在Android平台上实现这个示例程序
这是一个高效的开发方式:先在Windows平台上开发OpenCV功能模块,保持功能实现与UI实现分离。然后将功能模块迁移到Android平台,将UI实现替换成Android的实现。
这是一种建议的开发方式:在VS里面配置好JNI和OpenCV所需的包含目录,用VS开发C/C++模块。再用NDK生成so库,放进Android Studio工程里面。
0、下载Android版OpenCV SDK:https://sourceforge.net/projects/opencvlibrary/files/opencv-android/3.1.0/ --> OpenCV-3.1.0-android-sdk.zip,并解压
1、配置JNI、NDK和OpenCV包含目录。由于我们不需要用VS编译,所以只许配置包含目录即可
E:\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native\jni\include
(注意,OpenCV版本和NDK版本要对应,否则编译不过,例如OpenCV-2.4.11-android-sdk对应android-ndk-r10b)
E:\Program Files\Java\jdk1.7.0_79\include
E:\Program Files\Java\jdk1.7.0_79\include\win32
E:\android-ndk-r10b\platforms\android-19\arch-arm\usr\include
2、在VS里面完成C/C++模块编写
3、在Android Studio里面完成Android java代码的编写
4、将C/C++源码放在 Android项目根\app\jni 目录下,并在此目录下编写“Android.mk”和“Application.mk”文件,然后用NDK编译C/C++模块
5、真机运行
运行结果:
这个项目需要注意的是:
1、cameraTest.h和cameraTest.cpp和上一篇日志中所用的基本一致。唯一不同的是,由于Windows工程的包含目录和Android工程的包含目录不同(SDK不同,一个是SDK for windows一个是SDK for Android)。所以有些include指令需要改一下。
2、Android.mk文件中必须包含
OPENCV_LIB_TYPE:=STATIC
OPENCV_INSTALL_MODULES:=on
include E:\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native\jni\OpenCV.mk
前两句是指定OpenCV SDK里面的so库在本项目中的引用方式(静态方式)。最后一句是指定OpenCV SDK的位置。
3、Application.mk文件需要包含
APP_CFLAGS += -Wno-error=format-security
这是忽略format-security错误。