1.Opencv Android SDK

基于Opencv C++本地代码,通过Java语言接口使用JNI技术调用C++本地方法的SDK开发包。

在Android端集成OpenCV的三种方式

(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

在Android端集成OpenCV的三种方式

3.Android接入Opencv的三种方式

(1)接入OpenCV的Java SDK 包,直接在Java调用OpenCV方法;

在Android端集成OpenCV的三种方式

一个小例子:点击按钮实现Java调用opencv库进行图像灰度显示

实现步骤:

在Android端集成OpenCV的三种方式

  1. 新建一个Android项目
  2. 导入Opencv Android SDK   (file-new-import moudle-Opencv-android-sdk/sdk)
  3. 添加Opencv android sdk依赖项到库文件  (file-project structure-Dependencies + moudle implementation-Opencv-android-sdk)
  4. 修改Gradle文件使之相关参数保持一致。   (项目中的build.gradle和Opencvm android sdk中的build.gradle)
  5. 在Layout文件activity_main.xml中添加布局,控件
  6. 在MainActivity.java实现Opencv图像处理功能  
    • import opencv相关函数功能  
    • 加载Opencv本地库  
    • 为按钮添加监听事件  
    • 实现Bitmap到Mat的转换,使用opencv函数实现对Mat的处理,最终将Mat再转换为Bitmap使之在页面显示。

在Android端集成OpenCV的三种方式

在Android端集成OpenCV的三种方式

(2)使用OpenCV SDK提供的C++头文件与.so动态库与.a静态库,封装JNI使用C++实现调用;

Android Studio2.2前版本NDK开发流程:

Android Studio3.0后的版本NDK开发流程:

一个小例子:在安卓端自建C++项目实现opencv相关图像处理功能

实现步骤:

  1. 添加set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/opencv341/sdk/native/jni)
  2. 添加find_package(OpenCV REQUIRED core imgproc highgui ximgproc photo)
  3.  在target_link_libraries里添加${OpenCV_LIBS}

在Android端集成OpenCV的三种方式

 在Android端集成OpenCV的三种方式

(3)将OpenCV的源码重新编译成Android SDK库。

编译所需配置:

  1. JDK
  2. Android-sdk
  3. Apache-ant
  4. Android-ndk
  5. cmake:生成Makefile
  6. mingw:使用mingw编译
  7. opencv源码
  8. opencv_contrib源码

好处:可以获取到opencv最新的功能

缺点:编译较为复杂,且新的代码或许会存在不兼容与错误。 

发表回复