OAK相机深度流探测草莓距离

news2024/11/25 9:30:21

编辑:OAK中国
首发:oakchina.cn
喜欢的话,请多多👍⭐️✍
内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。

▌前言

Hello,大家好,这里是OAK中国,我是助手君。

本期教程,我们来利用OAK双目测距来探测草莓距离相机的实际距离。

在这里插入图片描述
OAK的双目测距可以帮助我们探测物体的实际距离,以此来定位目标。接下来我们就来实现利用OAK探测草莓的距离,这样就可以将深度信息传递给机械臂来达到自动采摘草莓的目的。
请添加图片描述

▌校准

如果是带壳的OAK相机,一般出厂前都会做校准,所以这步你可以跳过。

如果你是用的分体式的OAK相机,那你需要手动校准相机。或者你觉得测距精度不满意,你也可以自己再手动校准一下。

校准教程请查看这篇博客>>

▌探测草莓距离

首先创建的depth流

depth = pipeline.createStereoDepth()

从管道中获取数据,这样我们可以获取每个像素的深度信息。直接映射为毫米。

in_depth = q.get().getData()

因为输出数组位于 uint16 中,所以将获取到的数据格式改为uint16

depth.dtype = np.uint16

65535 的具体数值是一个特殊值,意味着无效的视差/深度结果。需要将65535过滤掉。

depth_frame = np.where(depth_frame==65535,np.nan,depth_frame)

选取合适的图像大小。

new_frme = depth_frame[180:220,280:360]

取图像深度数据的平均值,并转换为厘米。

mean_depth = np.nanmean(new_frme) / 1000

这样就把真实的深度数据求取出来了。

▌depthai双目测距使用注意事项

创建深度节点
使用createStereoDepth方法创建深度流和视差流

stereo = pipeline.createStereoDepth()

输出深度数据

首先需要将左右灰度相机的输出分别链接StereoDepth节点

left.out.link(stereo.left)
right.out.link(stereo.right)

深度流

stereo.depth.link(xout_depth.input)

视差流

stereo.disparity.link(xout_disparity.input)

冲突

  1. 深度流和视差流不可以同时使用。使用深度流时必须要开启setOutputDepth启用输出深度流。这是从视差流转换而来,在某些配置中会导致禁用视差流。
  2. setExtendedDisparity和setSubpixel这两个方法不可以同时开启。
    • setExtendedDisparity:作用是扩大视差范围。
    • setSubpixel:作用是提高的精度,可实现更长的距离。

使用细节

深度计算期间需要指定使用哪个中值滤波器。

  • MEDIAN_OFF:关闭
  • KERNEL_3x3:3*3中值滤波器
  • KERNEL_5x5:5*5中值滤波器
  • KERNEL_7x7:7*7中值滤波器
stereo.setMedianFilter(dai.StereoDepthProperties.MedianFilter.KERNEL_3x3)

对于视差深度数据,该值存储在 uint16 中,其中 uint16 的最大值 65535 是一个特定值,这意味着该距离是未知的。

深度流得到的数据是从视差流转换而来。

最小深度受限于最大视差范围,默认为 96,但在扩展视差模式下可扩展到 192。

想了解更多depthai深度计算细节可以参考depthai官方文档。

▌参考资料

https://docs.oakchina.cn/en/latest/
https://www.oakchina.cn/selection-guide/


OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态

戳「+关注」获取最新资讯↗↗

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

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

相关文章

uniapp 悬浮窗(悬浮球、动态菜单、在其他应用上层显示) Ba-FloatBall

简介(下载地址) Ba-FloatBall 是一款在其他应用上层显示的悬浮球插件。支持展示菜单、拖动、自动贴边等;支持自定义样式。 支持添加展示菜单,可自定义(不添加菜单,可只显示悬浮球)支持自定义悬…

一口吃不成ChatGPT,复旦版MOSS服务器被挤崩后续

ChatGPT 是目前最先进的 AI,由于 ChatGPT 的训练过程所需算力资源大、标注成本高,此前国内暂未出现对大众开放的同类产品。 适逢ChatGPT概念正火,2 月 21 日,复旦团队发布首个中国版类 ChatGPT 模型「MOSS」,没想到瞬时…

Python-生成列表

1.生成列表使用列表前必须先生成列表。1.1使用运算符[ ]生成列表在运算符[ ]中以逗号隔开各个元素会生成包含这些元素的新列表。另外,如果[ ]中没有元素就会生成空列表示例>>> list01 [] >>> list01 [] >>> list02 [1, 2, 3] >>…

云、安全、网络三位一体,Akamai 推出大规模分布式边缘和云平台 Akamai Connected Cloud

出品 | CSDN 云计算 云服务市场规模在持续增长。 基于网络技术积累与优势,与布局边缘计算之后,巨头 Akamai 在继续推进它的技术与产品进程。近日,Akamai 正式推出大规模分布式边缘和云平台 Akamai Connected Cloud,包含云计算、安…

软考学习笔记(题目知识记录)

答案为 概要设计阶段 本题涉及软件工程的概念 软件工程的任务是基于需求分析的结果建立各种设计模型,给出问题的解决方案 软件设计可以分为两个阶段: 概要设计阶段和详细设计阶段 结构化设计方法中,概要设计阶段进行软件体系结构的设计&…

学生管理系统-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

【案例6-2】 学生管理系统 【案例介绍】 1.任务描述 在一所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写一个学生管理系统,实现对学生信息的添加、删除、修改和查询功能。每个功能的具体要求如下: 系统的首页&#…

视频技术基础知识

一、视频图像基础 像素:图像的基本单元,即一个带有颜色的小块分辨率:图像的大小或尺寸,用像素个数来表示。原始图像分辨率越高,图像就越清晰位深:存储每位像素需要的二进制位数;位深越大&#…

JAVA线程入门简介

线程入门简介什么是程序?什么是进程?什么是线程?单线程与多线程并发与并行线程的使用用java查看有多少个cpu创建线程的两种方式继承Thread类,重写run方法实现Runnable接口,重写run方法多线程机制为社么是start?源码解析什么是程序? 是为完…

防错料使用二维码解决方案 生产过程物料防错管理

生产过程中,物料的防错管理是非常重要的一环。它能够有效地防止物料错用或混用,从而降低产品质量问题的发生率,减少生产成本和生产周期,提高生产效率和产品质量。以下是生产过程物料防错管理的具体措施:1.明确物料标识…

SpringBoot Data Redis来操作Redis

SpringBoot Data Redis来操作Redis1、Redis启动Redis主要的作用安装的位置启动2、Java中来操作Redis3、Spring Data Redis(重点)测试连接配置Redis序列化器redisTemplate操作常见数据类型通用操作,针对不同的数据类型都可以操作申明: 未经许可&#xff0…

浅谈Springboot自动化配置原理

文章目录1.前言2.SpringBoot的入口3.SpringBootApplication背后的秘密4.Configuration5.ComponentScan扫描bean6.EnableAutoConfiguration7.自动配置生效1.前言 不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政…

java面试题-JUC线程池

1.FutureTask的作用?FutureTask 是 Java 并发编程中的一个类,用于异步执行任务并获取其结果。它实现了 Future 和 Runnable 接口,因此可以作为一个可运行的任务提交给 Executor 执行,也可以通过 Future 接口获取任务执行的结果。FutureTask …

2023年DAMA-CDGA/CDGP数据治理认证选择哪家机构好?

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

将整数数组变为浮点型数组的np.asfarray()方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将整数数组转换为浮点型数组 np.asfarray() 选择题 关于以下代码说法错误的一项是? import numpy as np a1 np.array([1,2,3]) print("【显示】a1",a1) print("【执行】a…

网络工程(一) 简单的配置

网络工程 简单的配置 需求 两台交换机 两台路由器 两台PC AR1配置静态路由 system-view [HUAWEI]sysname ar1 [ar1]interface g 0/0/0 [ar1-G…0/0/0]ip address 192.168.2.1 24 [ar1-G…0/0/0]quit [ar1]interface g 0/0/1 [ar1-G…0/0/1]ip address 192.168.3.1 24 [ar1-G…

关于学习git时的一些疑惑与笔记

关于学习git时的一些疑惑与笔记SSH相关问题SSH是什么?SSH有什么作用?如何在github配置SSH?分支什么是本地分支,远程分支?main主分支与master主支?为什么要把master分支修改为main分支?什么时候用分支&…

Java线程——常见方法

一、 常见方法 1.1 概述 ① start_vs_run:直接调用run方法并不会启动新的线程 import cn.itcast.n2.util.FileReader; import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.Test") public class Test {public static void main(String[] args) {Thread t…

【网络安全】Windows系统安全实验

第3模块 Windows操作系统安全部分 3.1 帐户和口令的安全设置 3.1.1 实验目的 本章实验的目的主要是熟悉Windows操作系统中帐户和口令的安全设置,掌握删除、禁用帐户的方法,了解并启用密码策略和用户锁定策略,体验查看“用户权限分配”、…

如何在Linux环境下用VI编辑器写C程序编译C程序运行C程序

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重点说一说如何在Linux环境下用VI编辑器写C程序编译C程序运行C程序。相信大家在Windows环境下写C程序编译C程序运行C程序怎么弄都已经很清楚了,现在我们来看在Linux下如果来做&#xff…

Vue 在for循环中动态添加类名及style样式集合

介绍 在vue的 for 循环中,经常会使用到动态添加类名或者样式的情况,实现给当前的选中的 div 添加不同的样式。 动态添加类名 提示: 所有动态添加的类名,放在表达式里都需要添加引号,进行包裹。 通过 对象 的形式&a…