在Android端集成OpenCV的三种方式

news2024/11/19 1:24:33

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库进行图像灰度显示

实现步骤:

  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使之在页面显示。

(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做以下修改:
  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}
  • 在Layout文件activity_main.xml添加相关的布局和控件
  • 在MainActivity.java中添加按钮监听事件,在监听事件 里添加native方法并自动在native-lib.cpp中生成该函数
  • 在native-lib.cpp中实现图像处理功能并返回图像显示, 使用JNI进行调用。

 

 

(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最新的功能

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【QGIS入门实战精品教程】3.4:QGIS创建GeoPackage地理数据库及数据入库案例详解

GeoPackage(以下简称gpkg),内部使用SQLite实现的一种单文件、与操作系统无关的地理数据库。在QGIS中可以很方便的实现GeoPackage的创建与连接等操作。 一、QGIS创建GeoPackage 1. 创建数据库 QGIS创建GeoPackage的方法与ArcGIS中创建File GDB的类似,选择一个目标文件夹,…

Adobe Acrobat XI 一进去就闪退;解决Acrobat的闪退问题

一、原因分析 闪退是因为网络中校验版权时出现问题 二、解决办法 域名欺骗,添加伪造的host条目 1. 进入C:\Windows\System32\drivers\etc 找到hosts文件 2. 右机hosts,选择属性,在安全选项里,点击高级: 3. 在ho…

Hive+Spark离线数仓工业项目实战--数仓设计及数据采集(1)

数仓设计及数据采集 1. **数据仓库设计** - 建模:维度建模:【事实表、维度表】 - 分层:ODS、DW【DWD、DWM、DWS】、APP - **掌握本次项目中数仓的分层** - ODS、DWD、DWB、DWS、ST、DM 2. 业务系统流程和数据来源 - 数据源…

Webpack5搭建Vue环境 | Webpack

文章目录webpack打包其他资源图片资源file-loader文件的命名规则url-loaderwebpack5 asset方式字体文件的打包PluginCleanWebpackPluginHtmlWebpackPluginDefinePluginCopyWebpackPluginmode配置webpack打包其他资源 图片资源 虽然此时我未安装file-loader 但是我正常显示了图片…

SHOP++ V9.1商城系统:可视化装修,0基础也能打造高颜值商城!

SHOP B2B2C商城系统新版本V9.1 新增的店铺装修功能是一款针对电商的DIY装修工具。可以快速装修店铺。能同时满足不同用户的使用需求。 一、页面可视化编辑组件 电商大潮异军突起的今天,如何让你的商品页面快速的抓住顾客的眼球,是促成订单转化的重要因素…

项目实战之旅游网(二)后台用户管理(上)

目录 一.管理员列表 二. 新增管理员 三.修改管理员 四.管理员详情 一.管理员列表 后台用户也称为管理员,每个管理员能在后台进行的操作不同,所以不同的管理员有不同的权限。在项目中,权限表的设计为用户-角色多对多,角色权限多对多&…

四、网络层(四)IPv6

目录 4.1 IPv6的主要特点 4.2 IPv6地址 4.3 从IPv4到IPv6过渡 4.1 IPv6的主要特点 解决IP地址耗尽问题的措施有以下3种 采用无分类域间路由,使IP地址的分配更加合理。采用网络地址转换NAT以节省全球IP地址。采用具有更大地址空间的新版本的IP协议IPv6。&am…

力扣(LeetCode)199. 二叉树的右视图(C++)

迭代 按照层序遍历,每一层最右边的元素就是二叉树右视图的元素。迭代算法需要队列保存二叉树每一层的所有结点,并且在遍历下一层时,上一层的所有结点已经出队。在遍历下一层之前,记录队列大小,即为二叉树当前层的结点…

三.keepalived介绍及工作原理

keepalived介绍及工作原理keepalived介绍及工作原理一、keepalived的介绍二、Keepalived服务的重要功能1、管理LVS负载均衡软件2、实现对LVS集群节点健康检查功能(healthcheck)3、作为系统网络服务的高可用功能(failover)三、Keep…

Redis 集合(Sorted Set)方法使用详解

目录一、简介二、常用方法2.1、ZADD2.2、ZREM2.3、ZSCORE2.4、ZINCRBY2.5、ZCARD2.6、ZRANK、ZREVRANK2.7、ZRANGE、ZREVRANGE2.8、ZRANGEBYSCORE、ZREVRANGEBYSCORE2.9、ZCOUNT2.10、ZREMRANGEBYRANK2.11、ZREMRANGEBYSCORE2.12、ZINTERSTORE、ZUNIONSTORE2.13、ZRANGEBYLEX、…

day 9 模拟和高精度

P4924 [1007]魔法少女小Scarlet 题目描述 Scarlet 最近学会了一个数组魔法,她会在 nn 二维数组上将一个奇数阶方阵按照顺时针或者逆时针旋转 90∘。 首先,Scarlet 会把 1 到 n^2 的正整数按照从左往右,从上至下的顺序填入初始的二维数组中…

带您认识spreadsheet专属的数据仓库,助力报表开发好帮手

业务主题是针对业务的一个概念,它将同一数据源中属于同一个分析主题的表或表中的字段组合在一起,为进一步的可视化数据集提供基本元素。 业务主题我们看作是 Smartbi 产品中的数据仓库,主要应用于可视化数据集等操作。 业务主题的应用场景有如…

佳缘线上超市网站

成品详细信息 开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 基于SPRINGBOOTE的佳源线上超市管理系统的设计与实现 模块划分:公告类型模块、公告信息模块…

【Pycharm教程】在 PyCharm 中使用 Emacs 作为外部编辑器

Emacs是一个高级的文本编辑器,可以让你全面地操作你的代码。使用 Emacs 意味着可以根据您用于编码的语言进行完全可调整的编辑。 本文介绍了如何将 Emacs 添加到 PyCharm 并使用它来修改您的代码。 最新版本的 Emacs 可以从官网下载安装。 将 Emacs 配置为外部编…

介绍在全志A40i Ubuntu系统上定制文件系统的操作过程

为了给客户的测试和开发提供便利,飞凌嵌入式的开发板产品一般都支持多种操作系统,以基于全志T507H处理器设计研发的OKT507-C开发板为例,它支持三种操作系统,分别是:Linux、Android 和 Forlinx Desktop(Ubun…

stm32cubemx hal学习记录:电机控制

一、基础配置 1、配置RCC、SYS,SYS的Timebase Source选择TIM6 2、配置USART1、时钟84MHz 3、激活FreeRTOS,选择CMSIS_V1,Config parameters种USE_TIMERS选择ENABLE 二、编码器及电机驱动引脚配置 1、选用TIM3的编码器模式 2、驱动使用L2…

以数据赋能业务,qlik为企业搭建透明绩效管理平台

自从各类金融APP出现以来,分支机构网络的性质已经发生了巨大的变化。下一代分支机构通常是围绕着深化客户关系的愿景建立起来的,这些愿景包括理财方面的建议,以及企业和家庭贷款等更大的承诺,同时提供现金和交易设施。由于分支机构…

2022-12-23 工作记录--CSS-超出多行显示省略号ios真机偶失效问题

CSS-超出多行显示省略号ios真机偶失效问题 一、前言 最近帮同事解决一个了bug:在ios真机上,超出多行显示省略号的文本内容,偶然会出现未显示问题。 最开始,我没往 超出多行显示省略号 样式方面进攻,还以为是react渲染…

离散数学图论的练习题详解

文章目录学习技巧图论练习学习技巧 坚持 图论练习 一颗树有2个2度结点,1个3度结点和3个4度结点,则1度结点数为() 知识点:握手定理:所有节点度数之和等于边数的两倍解答:221334x2(213x−1)2\…

亚马逊首次亮相中性原子量子计算机Aquila

Aquila处理器内饰(图片来源:网络) 亚马逊网络服务(AWS)将在其名为Amazon Braket的特殊云服务器中托管量子计算机Aquila。这是量子计算第一次可以直接从AWS云端访问中性原子量子处理器。 而提供这台量子计算机的公司是Q…