android集成uniapp(在Android端集成OpenCV的三种方式)
导读:1.Opencv Android SDK 基于Opencv C++本地代码,通过Java语言接口使用JNI技术调用C++本地方法的SDK开发包。...
1.Opencv Android SDK
基于Opencv C++本地代码 ,通过Java语言接口使用JNI技术调用C++本地方法的SDK开发包 。
(1)etc:各类模型文件存储地址
(2)java:Java版本的Android SDK相关文件
(3)native:JNI层开发所需头文件 ,C++编译好的Opencv Android平台支持的本地库文件,Cmake文件(*.a,*.so) 。
2.环境搭建
(1)Opencv Android SDK
(2)JDK8
(3)Android studio
(4)Android SDK与NDK开发包 ,CMAKE
3.Android接入Opencv的三种方式
(1)接入OpenCV的Java SDK 包 ,直接在Java调用OpenCV方法;
新建Android项目 导入Opencv Android SDK依赖项 修改Gradle文件使之保持一致并编译 添加本地依赖项Opencv库文件 ,成功后在app中的build.gradle中dependencies {implementation project(path: sdk)} 在project structure中配置好ndk版本一个小例子:点击按钮实现Java调用opencv库进行图像灰度显示
实现步骤:
新建一个Android项目 导入Opencv Android SDK (file-new-import moudle-Opencv-android-sdk/sdk) 添加Opencv android sdk依赖项到库文件 (file-project structure-Dependencies + moudle implementation-Opencv-android-sdk) 修改Gradle文件使之相关参数保持一致 。 (项目中的build.gradle和Opencvm android sdk中的build.gradle) 在Layout文件activity_main.xml中添加布局 ,控件 在MainActivity.java实现Opencv图像处理功能 import opencv相关函数功能 加载Opencv本地库 为按钮添加监听事件 实现Bitmap到Mat的转换 ,使用opencv函数实现对Mat的处理 ,最终将Mat再转换为Bitmap使之在页面显示 。(2)使用OpenCV SDK提供的C++头文件与.so动态库与.a静态库 ,封装JNI使用C++实现调用;
Android Studio2.2前版本NDK开发流程:
编写C/C++文件,创建一个java文件 ,声明一个自定义的native方法即java层到native层的入口 使用静态域将so包加载进来 使用ndk编译so包 ,编写Android.mk, Application.mk,在gradle中指定so库的路径,gradle会自动将so文件打包进来 ,在andorid闭包中添加.Android Studio3.0后的版本NDK开发流程:
在SDK Tools中下载CMake 、LLDB 、NDK 创建一个新项目 ,并勾选Include C++ support 项目创建完毕会有一个c++的hello world示例, 其中cpp和External Build Files 用于放置C++源文件 和不同的ABI版本CMake脚本 ,将Opencv Android sdk直接放到cpp文件夹下 ,使用cmake实现opencv库的调用 。 在MainActivity中添加一个native方法,然后选中 , 按下alt+enter让IDE自动生成C++函数 在native-lib.cpp中可以看见自动生成的函数 ,使用JNI实现其cpp文件的调用 。一个小例子:在安卓端自建C++项目实现opencv相关图像处理功能
实现步骤:
创建一个新项目 ,并勾选Include C++ support (activity_main.xml,MainActivity.java,native-lib.cpp) 将opencv sdk放入app/src/main/cpp下 ,实现在cpp文件中使用opencv (cpp/opencv341/sdk/native/jni/include/opencv2)注:导入opencv contrib扩展库可以在网上直接下载编译好的sdk ,需对cmakelist.txt做以下修改: 添加set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/opencv341/sdk/native/jni) 添加find_package(OpenCV REQUIRED core imgproc highgui ximgproc photo) 在target_link_libraries里添加${OpenCV_LIBS} 在Layout文件activity_main.xml添加相关的布局和控件 在MainActivity.java中添加按钮监听事件 ,在监听事件 里添加native方法并自动在native-lib.cpp中生成该函数 在native-lib.cpp中实现图像处理功能并返回图像显示 , 使用JNI进行调用 。(3)将OpenCV的源码重新编译成Android SDK库 。
编译所需配置:
JDK Android-sdk Apache-ant Android-ndk cmake:生成Makefile mingw:使用mingw编译 opencv源码 opencv_contrib源码好处:可以获取到opencv最新的功能
缺点:编译较为复杂 ,且新的代码或许会存在不兼容与错误 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!