OpenCV4.9.0在Android 开发简介

news2024/9/20 1:23:55

 查看:OpenCV系列文章目录(持续更新中......)

上一篇:使用 Clojure 进行 OpenCV 开发简介

下一篇:暂无

引言:

OpenCV是一个跨平台计算机视觉库,广泛用于图像处理、计算机视觉和机器学习等领域。通过OpenCV,我们可以轻松地实现各种图像处理算法,如图像滤波、形态学变换、边缘检测、特征提取、图像分割等。随着移动设备的流行,越来越多的应用程序需要在移动平台上使用OpenCV。本篇博客将介绍OpenCV在Android开发中的基础知识和使用方法。您将学习如何配置OpenCV库和使用其API实现一些基本的图像处理功能,包括图像读写、图像显示、图像滤波、形态学操作等。我们还将讨论如何将OpenCV应用于实际应用程序中,例如照相机应用程序和人脸识别应用程序。本篇博客旨在为想要将OpenCV集成到其Android应用程序中的初学者提供指导。我们希望本文能够为读者提供理解OpenCV在Android平台上的基础知识,并提供实际示例来帮助他们更深入地了解OpenCV的API。无论您是有经验的Android开发人员还是初学者,我都相信本篇博客能够为您带来帮助。

Android 是一个基于 Linux 的开源移动操作系统,由谷歌领导的开放手机联盟开发。有关一般详细信息,请参阅 Android 主站点。

针对 Android 的开发与其他平台的开发有很大不同。因此,在开始针对 Android 进行编程之前,我们建议您确保熟悉以下关键主题:

  1. Java 编程语言是 Android 操作系统的主要开发技术。此外,您还可以找到有关 Java 的 Oracle 文档。
  2. Java 本机接口 (JNI) 是一种在 Java 虚拟机中运行本机代码的技术。此外,您还可以找到有关 JNI 的 Oracle 文档。
  3. Android Activity 及其生命周期,这是必不可少的 Android API 类。
  4. OpenCV 开发肯定需要对 Android Camera 的细节有一定的了解。

本指南旨在帮助您学习 Android 开发基础知识并快速设置您的工作环境。它已在 Ubuntu 22.04 和 Windows 10 上进行了测试。如果您在彻底执行这些步骤后遇到任何错误,请随时通过 OpenCV 论坛与我们联系。我们将尽最大努力为您提供帮助。

用于 Android 开发的手动环境设置

在本教程中,我们将使用官方的 Android Studio IDE 和一组其他免费可用的工具。

获取工具和依赖项

Here's how to get a ready to work environment:

  1. 下载并安装 Android Studio:

Ubuntu的:

  1. 下载 Android Studio: https://developer.android.com/studio
  2. 提取tar.gz存档
  3. 按照中的说明操作:在终端中打开文件夹并运行Install-Linux-tar.txtandroid-studio/bin./studio.sh
  4. 通过GUI执行标准安装
  5. 或者,您可以通过单击菜单“工具”->“创建桌面条目”在桌面上添加快捷方式以快速访问。该菜单在创建或打开任何项目后显示。

Windows:只需从官方网站下载 Android Studio 并运行安装程序即可

  1. 安装全新的 Android SDK 和 NDK:
  2. 在 Android Studio 中打开 SDK 管理器(自定义 -> 所有设置 -> 语言和框架 -> Android SDK)
  3. 启用“显示包详细信息”复选框

sdk_ndk_manager.png

  1. 检查最新版本的 SDK 和 NDK,然后按 OK
  2. 确保您的设备支持所选的 SDK 版本
  3. 安装构建所需的所有软件包:
sudo apt install git cmake ninja-build openjdk-17-jdk openjdk-17-jre
  • 其余必需的包是依赖项,应自动安装

查看OpenCV示例

  1. 从 Github 或 SourceForge 的官方发布页面从 Android SDK 下载 OpenCV。
  2. 使用操作系统工具提取 zip 存档。
  3. 在 Android Studio 中打开项目。<YOUR_OPENCV_BUILD_FOLDER>/OpenCV-android-sdk/samples
  4. 连接您的设备
  • 应在设备上启用调试,您可以在 Web 上找到有关它的说明
  • 或者,您可以使用 Android Studio 附带的虚拟设备
  • choose_device.png

从下拉菜单中选择一个示例(例如,)并运行它。15-puzzle

用于测试和调试的设置设备

通常,上述配方按预期工作,但在某些情况下,必须执行其他操作。在本节中,我们将介绍一些情况。

Windows主机

如果您使用的是 Windows 10 或更高版本,则无需执行其他操作即可连接手机并在其上运行示例。但是,早期的 Windows 版本需要更长的过程:

  1. 在Android设备上启用USB调试(通过“设置”菜单)。
  2. 使用 USB 数据线将 Android 设备连接到您的 PC。
  3. 转到“开始”菜单,然后右键单击“计算机”。在上下文菜单中选择“管理”。系统可能会要求您提供管理权限。
  4. 在左窗格中选择“设备管理器”,然后在列表中查找未知设备。您可以尝试拔下它,然后重新插入,以检查它是否是您的确切设备出现在列表中。

usb_device_connect_01.png

5、试试运气,无需任何修改即可安装 Google USB 驱动程序:右键单击未知设备,选择“属性”菜单项 -> 详细信息选项卡 -> 更新驱动程序按钮。

usb_device_connect_05.png

6.选择“浏览计算机以查找驱动程序软件”。

usb_device_connect_06.png

  1. 指定文件夹的路径。 <Android SDK folder>/extras/google/usb_driver/ folder.

    usb_device_connect_07.png

  2. 如果系统提示您安装未经验证的驱动程序并报告成功,则您已经完成了 USB 驱动程序安装。

    usb_device_connect_08.png

    usb_device_connect_09.png

  3. 否则(出现如下所示的故障),请按照以下步骤操作。

    usb_device_connect_12.png

  4. 再次右键单击未知设备,选择“属性”-“>详细信息”-“>硬件 ID”,然后复制类似 的行 USB\VID_XXXX&PID_XXXX&MI_XX.

    usb_device_connect_02.png

  5. 现在打开文件 <Android SDK folder>/extras/google/usb_driver/android_winusb.inf. 选择 Google.NTx86 或 Google.NTamd64 部分,具体取决于您的主机系统体系结构

    usb_device_connect_03.png

  6. 您的设备应该有一个与现有记录类似的记录,您需要手动添加一个

    usb_device_connect_04.png

  7. 保存android_winusb.inf文件并尝试再次安装 USB 驱动程序

    usb_device_connect_05.png

    usb_device_connect_06.png

    usb_device_connect_07.png

  8. 这次安装应该会成功

    usb_device_connect_08.png

    usb_device_connect_09.png

  9. 未知设备现在被识别为 Android 手机。

    usb_device_connect_10.png

  10. 可以通过 adb devices 命令在控制台中验证设备 USB 连接是否成功。

    usb_device_connect_11.png

  11. 现在,在 Eclipse 中,转到 Run -> Run/Debug 以常规模式或调试模式运行应用程序。设备选择器将允许您在设备中进行选择。
Linux主机

虽然最新的 Ubuntu 版本适用于连接的 Android 设备,但旧版本可能会出现问题。但是,它们中的大多数都可以轻松修复。您必须创建一个新的 **/etc/udev/rules.d/51-android.rules** 配置文件,其中包含有关您的 Android 设备的信息。您可以在此处找到一些供应商 ID 或执行 lsusb 命令以查看插入的 Android 设备的供应商 ID。以下是LG设备的此类文件的示例:

SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666", GROUP="plugdev"

然后重新启动您的adb服务器(最好重新启动系统),插入您的Android设备并执行adb devices 命令。您将看到连接的设备列表:

savuor@rostislav-laptop:~/Android/Sdk/platform-tools$ ./adb devices
List of devices attached
R58MB40Q3VP device
savuor@rostislav-laptop:~/Android/Sdk/platform-tools$
Mac OS 主机

无需执行任何操作,只需通过 USB 连接您的设备并运行 adb devices 即可检查连接。

后续步骤

现在,当您设置和配置了 OpenCV4Adroid SDK 实例后,您可能希望在自己的应用程序中使用 OpenCV。您可以在单独的 Android 开发 OpenCV 教程中了解如何执行此操作。


 参考文献:

1、《Introduction into Android Development》Rostislav Vasilikhin

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

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

相关文章

【翻译】Attentive Pooling Networks

摘要&#xff1a; 在这项工作中&#xff0c;我们提出了注意力池化&#xff08;AP&#xff09;&#xff0c;一种用于判别模型训练的双向注意力机制。在使用神经网络进行成对排序或分类的背景下&#xff0c;AP使得池化层能够意识到当前的输入对&#xff0c;使得两个输入项的信息…

AI系统性学习03—ChatGPT开发教程

文章目录 1、OpenAI关键概念⭐️2、OpenAI SDK介绍3、OpenAI API KEY&API 认证3.1 REST API安全认证 4、OpenAI模型⭐️4.1 模型分类4.2 GPT44.3 GPT-3.54.4 Embeddings 5、OpenAI快速入门6、Function calling(函数调用)⭐️⭐️⭐️6.1 应用场景6.2 支持function calling的…

稀碎从零算法笔记Day23-LeetCode:相同的树

题型&#xff1a;二叉树的遍历、链表 链接&#xff1a;100. 相同的树 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;…

ERP系统在企业管理中的重要作用

效率和盈利能力是企业在商业领域取得成功的两大关键要素。企业希望以尽可能高效的方式执行必要的、有利可图的业务流程&#xff0c;但又需要在保持最低运营成本的同时最大化企业的底线利润。要实现这种高效和高盈利的水平&#xff0c;企业需要扩展其业务流程管理策略&#xff0…

python网络爬虫实战教学——urllib的使用(3)

文章目录 专栏导读1、urlsplit2、urlunsplit3、urljoin4、urlencode 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN 数据分析领域优质创作者&#xff0c;专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》&#xff0c;本专栏针对大学生、…

三级数据库技术考点(详解!!)

1、 答疑:【解析】分布式数据库系统按不同层次提供的分布透明性有:分片透明性;②位置透明性;③局部映像透明性&#xff0c;位置透明性是指数据分片的分配位置对用户是透明的&#xff0c;用户编写程序时只需 要考虑数据分片情况&#xff0c;不需要了解各分片在各个场地的分配情…

CMake学习(上)

1. CMake概述 CMake 是一个项目构建工具&#xff0c;并且是跨平台的。关于项目构建我们所熟知的还有Makefile&#xff08;通过 make 命令进行项目的构建&#xff09;&#xff0c;大多是IDE软件都集成了make&#xff0c;比如&#xff1a;VS 的 nmake、linux 下的 GNU make、Qt …

关于Rust的项目结构的笔记

层级 PackageCrateModulePath Package cargo的特性, 构建、测试、共享Crate 组成: 一个 Cargo.toml 文件, 描述了如何构建这些 Crates至少包含一个 crate最多只能包含一个 library crate可以包含任意个 binary crate cargo new demo-pro 会产生一个名为 demo-pro 的 Packa…

蓝桥杯-礼物-二分查找

题目 思路 --刚开始想到暴力尝试的方法&#xff0c;但是N太大了&#xff0c;第一个测试点都超时。题目中说前k个石头的和还有后k个石头的和要小于s&#xff0c;在这里要能想到开一个数组来求前n个石头的总重&#xff0c;然后求前k个的直接将sum[i]-sum[i-k-1]就行了&#xff0…

Vue+SpringBoot打造快乐贩卖馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视频收藏模块2.4 视频评分模块2.5 视频交易模块2.6 视频好友模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 搞笑视频表3.2.2 视频收藏表3.2.3 视频评分表3.2.4 视频交易表 四、系…

蓝桥杯-python-递归

递归&#xff1a;通过自我调用解决问题的函数 注意&#xff1a; #1.递归出口 #2.当前问题如何变成子问题 例子&#xff1a;利用递归写一个阶乘函数&#xff0c;F(n),求n的阶乘 def f(n):if n < 1:return 1ans n * f(n-1)return ans print(f(5)) 例子&#xff1a;汉诺塔…

大数据Doris(六十九):项目线上表现

文章目录 项目线上表现 一、查询响应时间

【Linux第三课-基础开发工具的使用】yum、vim、gcc/g++编译器、gdb、Make/Makefile编写、进度条程序、git命令行简单操作

目录 yum - 软件包管理器快速认识yum快速使用yumyum搜索yum安装yum卸载 yum的周边 - yum的整个生态问题 vim快速介绍vimvim的模式命令模式插入模式低行模式 常见模式 -- 命令、低行命令模式 -- 光标的移动命令模式 -- 复制粘贴、剪贴、删除命令模式 -- 小写/大写替换模式命令模…

个人开发App成功上架手机应用市场的关键步骤

目录 1. 苹果审核和APP备案 2. APP上架操作步骤 3. 审核和发布 4. 上线工作 总结 参考资料 在当前移动应用市场竞争激烈的背景下&#xff0c;个人开发App如何成功上架成为开发者们必须面对的重要任务。本文将重点介绍自建App上架至手机应用市场的流程&#xff0c;包括苹果…

Linux离线安装Docker-Oracle_11g

拉取oracle11g镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g创建11g容器 docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g查看容器是否创建成功 docker ps -a导出oracle容器&#xff0c;查看…

HarmonyOS卡片刷新服务,信息实时更新一目了然

如今衣食住行娱乐影音等App占据了大多数人的手机&#xff0c;一部手机可以满足日常大多需求&#xff0c;但对需要经常查看或进行简单操作的场景来说&#xff0c;总需要用户点开App操作未免过于繁琐。 针对该问题&#xff0c; HarmonyOS SDK为用户提供了Form Kit&#xff08;卡…

java算法第29天 | * 491.递增子序列 * 46.全排列 * 47.全排列 II

491.递增子序列 本题和大家刚做过的 90.子集II 非常像&#xff0c;但又很不一样&#xff0c;很容易掉坑里。 90.子集是可以对数组进行重新排序&#xff0c;再去重。但是这道题是要求子序列&#xff0c;如果对数组重排序会打乱顺序&#xff0c;无法获取子序列。 因此491.递增子…

AI如何支持慈善组织

为各种有意义的事业提供支持&#xff0c;无论是努力寻找治愈疾病的方法、研发使生活更轻松的技术&#xff0c;还是为有需要的人提供服务&#xff0c;都是无比崇高的使命。提供捐款或是投入时间支持的捐助者和志愿者往往对他们选择支持的事业的目标、服务和资源分配存有诸多疑虑…

C语言入门——数据类型,变量和常量

数据类型 基本数据类型&#xff08;不能再分&#xff09; 整数 整型 -- int -- 4字节&#xff08;一个字节占8位&#xff09; 短整型 -- short int -- 2字节 长整型 -- long int -- 8字节 short num01 3; long num02 4; long long num03 5; //int关键字可以省略实际上等价…

(基础)AJAX概念和axios使用、URL、请求方法和数据提交、HTTP协议、接口、form-serialize插件

AJAX概念和axios使用 AJAX概念 AJAX就是使用XMLHttpRequest对象与服务器通信&#xff0c;它可以使用JSON、XML、HTML和text文本等格式发送和接收数据&#xff0c;AJAX最吸引人的就是它的异步特性&#xff0c;也就是说它可以在不重新刷新页面的情况下与服务器通信&#xff0c;…