用安卓设备识别ArUco码

2023-05-16

先来看下效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

静态图片中的ArUcon码识别

在之前程序的基础上再添加一个Button和TextView,点击“识别”按钮检测照片中的ArUco码后,在屏幕最下方显示识别到的ArUco的id和四个角点坐标,四个角点从左上角点开始顺时针计数。
还有些地方没有完善,不知道为什么识别过后颜色会变。因为还没有做校准、相机标定,所以红色的Z轴指向不正确。

    private void detectArUco() {

        Mat src = Imgcodecs.imread(imagePath);  //相册选的图
        Mat gray = new Mat();
        Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGRA2GRAY);  //灰度处理

        Dictionary dictionary = Aruco.getPredefinedDictionary(Aruco.DICT_4X4_50);

        List<Mat> corners = new LinkedList<>();
        corners.clear();

        MatOfInt ids = new MatOfInt();

        DetectorParameters parameters;
        parameters = DetectorParameters.create();

        Aruco.detectMarkers(gray, dictionary, corners, ids, parameters);

        if (corners.size() > 0) {

            double[] id = ids.get(0, 0);
            double id0 = id[0];
            String sid0 = Double.toString(id0);

            Mat corner1 = corners.get(0);

            double a[] = corner1.get(0,0);
            double a0 = a[0];
            double a1 = a[1];
            String sa0 = Double.toString(a0);
            String sa1 = Double.toString(a1);

            double b[] = corner1.get(0, 1);
            double b0 = b[0];
            double b1 = b[1];
            String sb0 = Double.toString(b0);
            String sb1 = Double.toString(b1);

            double c[] = corner1.get(0, 2);
            double c0 = c[0];
            double c1 = c[1];
            String sc0 = Double.toString(c0);
            String sc1 = Double.toString(c1);

            double d[] = corner1.get(0, 3);
            double d0 = d[0];
            double d1 = d[1];
            String sd0 = Double.toString(d0);
            String sd1 = Double.toString(d1);

            tv.setText(sid0 + "\n" + sa0 + ", " + sa1 + "\n" + sb0 + ", " + sb1 + "\n" + sc0 + ", " + sc1 + "\n" + sd0 + ", " + sd1 );

            Aruco.drawDetectedMarkers(src, corners, ids);

            Mat rvecs=new Mat();
            Mat tvecs=new Mat();
            Mat cameraMatrix = new Mat();
            Mat distCoeffs = new Mat();
            cameraMatrix = Mat.eye(3,3, CvType.CV_64FC1);
            distCoeffs = Mat.zeros(5,1,CvType.CV_64FC1);

            Aruco.estimatePoseSingleMarkers(corners, 0.04f, cameraMatrix, distCoeffs, rvecs, tvecs);

            for(int i=0;i<ids.toArray().length;i++){
                Aruco.drawAxis(src, cameraMatrix, distCoeffs, rvecs.row(i), tvecs.row(i), 0.02f);
            }
        }

        Bitmap bp1 = BitmapFactory.decodeFile(imagePath);
        Utils.matToBitmap(src, bp1);

        ImageView iv = this.findViewById(R.id.sample_img);
        iv.setImageBitmap(bp1);

        gray.release();
        src.release();
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用安卓设备识别ArUco码 的相关文章

  • ROS18.04:安装gazebo,下载模型

    一 安装gazebo Ubuntu18 04安装Gazebo并与ROS连接 Jize 的博客 CSDN博客 ubuntu18安装gazebo 其中报错 xff1a 解决 xff1a sudo apt upgrade 二 下载模型 方法一 x
  • Github使用指南(持续更新中)

    一 简介 Github的网页端是www github com GitHub是一个面向开源及私有软件项目的托管平台 xff0c 因为只支持Git作为唯一的版本库格式进行托管 xff0c 故名GitHub GitHub于2008年4月10日正式
  • Linux安装离线版docker

    Linux安装离线版docker 1 docker 离线包下载地址 https download docker com linux static stable x86 64 2 创建 docker service xff0c 代码中 ins
  • Android Studio 超详细 安装SDK 教程

    一 首先安装Android SDK Tools 国内下载地址Android SDK Tools 百度云下载地址链接 xff1a https pan baidu com s 1RmXi8b lxksVS5hJuSLPIg 提取码 xff1a
  • 【Android Studio】win10安装教程 史上最详细

    一 安装Android Studio 1 首先下载Android Studio 官网下载 xff1a Androis Studio 官网 2 双击打开 点击Next 3 选择安装 xff0c 点击Next 4 选择安装路径 xff0c 点击
  • Android Studio 创建手机虚拟机教程

    小白 Android Studio创建手机虚拟机 版本 AndroidStudio 3 5 3 在APP开发中不一定每时每刻都有真机 xff0c 所以可以通过AndroidStudio 创建一个手机虚拟机 1 创建新的手机虚拟机 点击No
  • Android Studio 下载设备虚拟机镜像

    这里以下载手机虚拟机镜像为示例 需要用到的软件 Android SDK Tools 不知道如何安装Android SDK Tools 的请参考 安装Android SDK Tools SDK Manager exe打不开的请参考这里 SDK
  • 【嵌入式】交叉编译 移植 i2cTool4.1 史上最详细

    一 i2ctool 介绍 i2c tools工具是一个专门用来调试 i2c 的 并且是开源的 他可以 xff1a 1 检测有几组i2c总线在系统上 2 查看挂载在i2c上面设备寄存器的数值 3 可以读取挂载在i2c上面设备寄存器的数值 4
  • 【Ubuntu】 vim 安装与美化 史上最详细

    一 安装vim sudo apt get install vim 二 配置vim 针对单个用户配置 vim vimrc 针对全部用户配置 vim etc vim vimrc 三 配置选项 1 我的配置 34 设置编码 set fileenc
  • 【Ubuntu】Ubuntu16.04安装 搜狗输入法 史上最详细

    一 基本配置 开发环境 xff1a ubuntu16 04 二 准备工作 下载 搜狗输入法linux版 搜狗输入法官网Linux版 我这里是64位的 xff0c 所以选择64位 1 拷贝搜狗输入法到ubuntu cp media sf sh
  • 【嵌入式】---交叉编译 移植 ALSA1.2.2

    一 开发环境 开发环境 xff1a ubuntu16 04 开发平台 xff1a imx6q 交叉编译工具链 xff1a arm linux gnueabihf 二 需要的软件 1 alsa lib 下载地址 xff1a alsa lib
  • 【Android Studio 】经典常用开发设置 [最新最详细-持续更新]

    概述 一个好的配置能够帮助开发者完成更便捷 更快速的开发书山有路勤为径 xff0c 学海无涯苦作舟 我是秋知叶i 期望每一个阅读了我的文章的开发者都能够有所成长 一 当前 Android Studio 版本 Android Studio 经
  • 【MobaXterm】登录SSH服务器

    登录SSH远程服务器 一 配置用户信息1 打开Session2 打开SSH3 新建用户4 创建用户 二 配置登录SSH服务器信息三 再次登录服务器 一 配置用户信息 1 打开Session 2 打开SSH 3 新建用户 4 创建用户 输入账
  • 【adb】 win11 配置 adb环境 史上最详细

    官网下载 adb官网下载 下载下来的压缩包platform tools r33 0 3 windows zip 我们解压得到一个platform tools 二 配置adb环境 新建系统变量 点击浏览目录选择解压的文件夹 xff0c 然后点
  • 【Dev-c++】美化配置

    概述 一个好的配置能够帮助开发者完成更便捷 更快速的开发书山有路勤为径 xff0c 学海无涯苦作舟 我是秋知叶i 期望每一个阅读了我的文章的开发者都能够有所成长 一 设置语法格式 点击工具 编辑器选项 选择 语法 点击预设这里选择 Plas
  • 嵌入式Linux调试器GDB的使用

    调试一直是程序开发的重中之重 xff0c 使用GDB调试可以帮助我们快速找到程序中的错误 注意 xff1a 在进行GDB调试之前 xff0c 程序在gcc编译时要加上 g 选项 1 进入GDB xff1a gdb 可执行文件名 2 查看GD
  • 华清数据结构项目实训——学生信息管理系统

    模块划分及主要文件 1 主程序模块 主要功能 xff1a 程序的入口 主要文件 xff1a main c 2 菜单模块 主要功能 xff1a 完成菜单的显示以及登录和调用相应功能函数 主要文件 xff1a menu h menu c 3 学
  • sqlite3的安装以及增删改查排序功能的实现

    目录 一 安装sqlite3 1 安装sqlite3数据库 xff1a 2 安装编译依赖库 3 安装可视化界面 4 验证数据库是否安装成功 二 常用数据库指令及SQL数据类型 1 常用数据库指令 2 常用SQL数据类型 三 数据库操作 1
  • C++函数模板

    前言 模板是一个通用框架 xff0c 是C 43 43 泛型编程 思想的主要体现 C 43 43 提供了函数模板 和类模板 两种模板机制 xff0c 本文介绍的是函数模板相关的知识 一 函数模板的作用及语法 作用 xff1a 用一个虚拟的类
  • MQ-2烟雾传感器

    一 MQ 2烟雾传感器简介 MQ 2常用于家庭和工厂的气体泄漏监测装置 xff0c 适宜于液化气 苯 烷 酒精 氢气 烟雾等的探测 故因此 xff0c MQ 2可以准确来说是一个多种气体探测器 MQ 2的探测范围极其的广泛 它的优点 xff

随机推荐

  • PX4姿态解算源码原理理解

    PX4源码原理理解一 xff0e 主要参考资料链接 xff1a 1 1 取PX4源码一小部分姿态解算来进行讲解姿态解算源码中文注释 xff1a https blog csdn net zouxu634866 article details
  • Linux 使用 curl 命令发送带参请求

    1 发送 post 请求 xff08 请求参数为 json 格式 xff09 xff1a curl i X POST H 39 Content type 39 39 application json 39 d 39 34 id 34 34
  • 理解和创建:Anaconda、Jupyterlab、虚拟环境、Kernel

    Anaconda如何创建虚拟环境并作为jupyterlab的内核使用 先明确一波概念一 虚拟环境 1 环境是什么 xff1f 2 虚拟环境是什么 xff1f 3 为什么需要创建虚拟环境 xff1f 4 Anaconda创建 激活 退出 删除
  • 【Windows】六种正确清理C盘的方法,解决你的红色烦恼

    如何正确的清理C盘 前言清理方法1 利用Windows自己附带的磁盘清理工具2 开启自动清理3 通过 配置存储感知或立即运行 来清理4 管理C盘中的程序5 系统文件夹转移6 将C盘现有内容转移到别的盘 参考链接 前言 Windows操作系统
  • 【机器学习】数据增强(Data Augmentation)

    文章目录 一 引言 背景二 为什么需要数据增强 xff1f 三 什么是数据增强 xff1f 定义分类 四 有监督的数据增强1 单样本数据增强 xff08 1 xff09 几何变换类 xff08 2 xff09 颜色变换类 2 多样本数据增强
  • 基于FRFT的雷达辐射源信号特征分析及提取

    信号在FRFT域上表示 xff0c 同时包含了信号的时域信息和频域信息 论文中提出的算法流程如图 xff1a 步骤 xff11 xff1a 提取雷达辐射源信号脉冲序列的脉冲 xff0c 进行相应的预处理 xff0c 包括带宽和能量的归一化
  • 【Linux】查看、激活、退出虚拟环境以及 CommandNotFoundError 错误解决

    文章目录 一 虚拟环境有关命令二 CommandNotFoundError Your shell has not been properly configured to use 39 conda activate 39 参考链接 一 虚拟环
  • 【PyTorch】torch.utils.data.DataLoader 简单介绍与使用

    文章目录 一 torch utils data DataLoader 简介二 实例参考链接 一 torch utils data DataLoader 简介 作用 xff1a torch utils data DataLoader 主要是对
  • 【Python】np.unique() 介绍与使用

    文章目录 一 np unique 介绍二 np unique 原型三 实例参考链接 一 np unique 介绍 对于一维数组或者列表 xff0c np unique 函数 去除其中重复的元素 xff0c 并按元素 由小到大 返回一个新的无
  • 【Pytorch】交叉熵损失函数 CrossEntropyLoss() 详解

    文章目录 一 损失函数 nn CrossEntropyLoss 二 什么是交叉熵三 Pytorch 中的 CrossEntropyLoss 函数参考链接 一 损失函数 nn CrossEntropyLoss 交叉熵损失函数 nn Cross
  • 【Linux】rm 命令:删除文件/文件夹

    文章目录 一 删除文件 文件夹 xff1a rm 命令二 删除文件 xff08 即这个文件被删除 xff09 三 删除文件夹四 注意参考链接 一 删除文件 文件夹 xff1a rm 命令 rm 是强大的删除命令 xff0c 它可以 永久性地
  • 【Pytorch】torch.max() 函数详解

    文章目录 一 一个参数时的 torch max 1 函数介绍2 实例 二 增加指定维度时的 torch max 1 函数介绍2 实例 三 两个输入张量时的 torch max 1 函数介绍2 实例 参考链接 一 一个参数时的 torch m
  • 【机器学习】KNN 算法介绍

    文章目录 一 KNN 简介二 KNN 核心思想实例分析 xff1a K 值的影响 三 KNN 的关键1 距离计算1 闵可夫斯基距离2 曼哈顿距离3 欧氏距离4 切比雪夫距离5 余弦距离总结 2 K值选择 四 KNN 的改进 xff1a KD
  • 【机器学习】Radius Neighbors Classifier(rNN,radius nearest neighbors)

    文章目录 一 半径近邻分类器 简介二 半径近邻分类器算法三 Radius Neighbors Classifier With Scikit Learn参考链接 一 半径近邻分类器 简介 Radius Neighbors Classifier
  • 扫盲:单片机入门分享 晶振 复位电路与电源

    学单片机走过许多弯路 xff0c 挖过许多坑 xff0c 浪费了很多时间 xff0c 做过实际产品后回顾过去的学习经历 xff0c 发现很多坑其实是可以避免的 xff0c 单片机的入门应该可以更轻松一点 xff0c 借CSDN论坛一方宝地
  • VR技术原理分析,【VR原理入门理论篇】

    VR技术原理分析 xff0c VR原理入门理论篇 xff0c 学习研究VR技术必须要了解的理论知识 目录 1 VR沉浸感和交互作用产生的原理 xff1a 2 关于沉浸感和交互作用的定义 3 如何生成符合VR要求的虚拟世界 4 最主流的VR开
  • ST-Link驱动安装不正确,设备管理器黄色感叹号,win10安装stlink驱动

    这是由于驱动没有安装好导致的 xff0c 从该链接下载驱动文件 xff1a http pan baidu com s 1bog5FZ5 我是win10 win7 win8一样的办法 解压缩后 xff0c 直接以管理员身份运行其中的dpins
  • 使用CIDR计算划分子网个数

    概念 CIDR xff08 无类别域间路由 xff0c Classless Inter Domain Routing xff09 是一种IP地址划分的方法 xff0c 其目的是更加有效地使用IPv4地址空间 CIDR的原理是将一个IP地址划
  • 关于字符串的长度和大小的定义

    char a 61 aaaaa 字符串长度为5 xff0c 数组长度 xff08 大小 xff09 为6 xff1b char b 5 61 aaaaa 字符串长度不确定 xff0c 数组长度 xff08 大小 xff09 为5 xff1b
  • 用安卓设备识别ArUco码

    先来看下效果 静态图片中的ArUcon码识别 在之前程序的基础上再添加一个Button和TextView xff0c 点击 识别 按钮检测照片中的ArUco码后 xff0c 在屏幕最下方显示识别到的ArUco的id和四个角点坐标 xff0c