Zed 捕获图像+测距

Zed 捕获图像+测距

  • 1. 导入相关库
  • 2. 相机初始化设置
  • 3. 获取中心点深度数据
  • 4. 计算中心点深度值
  • 5. 完整代码
  • 5. 实验效果

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面中心点的深度值,为yolo测距打基础。

1. 导入相关库

import pyzed.sl as sl
import math
import numpy as np
import sys
import math

2. 相机初始化设置

 zed = sl.Camera()
# 相机初始化设置init_params = sl.InitParameters()init_params.depth_mode = sl.DEPTH_MODE.ULTRA  # 使用高质量模式init_params.coordinate_units = sl.UNIT.MILLIMETER  # 单位设置为毫米

3. 获取中心点深度数据

if zed.grab(runtime_parameters) == sl.ERROR_CODE.SUCCESS:  # 相机成功获取图象zed.retrieve_image(image, sl.VIEW.LEFT)  # image:容器,sl.VIEW.LEFT:内容zed.retrieve_measure(depth, sl.MEASURE.DEPTH)   # 深度值zed.retrieve_measure(point_cloud, sl.MEASURE.XYZRGBA)  # 保留RGBA color的三维点云数据img = image.get_data()  # 转换成图像数组,便于后续的显示或者储存dep_map = dep.get_data()# 获取图像的像素坐标x = round(image.get_width() / 2)y = round(image.get_height() / 2)err, point_cloud_value = point_cloud.get_value(x, y)  # 将像素坐标转为三维坐标并存储

4. 计算中心点深度值

if math.isfinite(point_cloud_value[2]):      # 判断坐标不为空和无限大distance = math.sqrt(point_cloud_value[0] * point_cloud_value[0] +point_cloud_value[1] * point_cloud_value[1] +point_cloud_value[2] * point_cloud_value[2])   # 计算距离print(f"Distance to Camera at {{{x};{y}}}: {distance}")

5. 完整代码

import os
import cv2
import pyzed.sl as sl
import numpy as np
import mathdef main():# 创建相机对象zed = sl.Camera()# 相机初始化设置init_params = sl.InitParameters()init_params.camera_resolution = sl.RESOLUTION.HD1080  # Use HD1080 video modeinit_params.camera_fps = 30  # fps可选:15、30、60、100# 打开相机status = zed.open(init_params)if status != sl.ERROR_CODE.SUCCESS: #Ensure the camera has opened succesfullyprint("Camera Open : "+repr(status)+". Exit program.")exit()# Create and set RuntimeParameters after opening the cameraruntime_parameters = sl.RuntimeParameters()image = sl.Mat()   # 图像depth = sl.Mat()   # 深度值dep = sl.Mat()  # 深度图point_cloud = sl.Mat()   # 点云i = 0while True:if zed.grab(runtime_parameters) == sl.ERROR_CODE.SUCCESS:  # 相机成功获取图象zed.retrieve_image(image, sl.VIEW.LEFT)  # image:容器,sl.VIEW.LEFT:内容zed.retrieve_measure(depth, sl.MEASURE.DEPTH)   # 深度值zed.retrieve_image(dep, sl.VIEW.DEPTH)  # 深度图zed.retrieve_measure(point_cloud, sl.MEASURE.XYZRGBA)  # 保留RGBA color的三维点云数据img = image.get_data()  # 转换成图像数组,便于后续的显示或者储存dep_map = dep.get_data()# 获取图像的像素坐标x = round(image.get_width() / 2)y = round(image.get_height() / 2)err, point_cloud_value = point_cloud.get_value(x, y)  # 将像素坐标转为三维坐标并存储distance = math.sqrt(point_cloud_value[0] * point_cloud_value[0] +point_cloud_value[1] * point_cloud_value[1] +point_cloud_value[2] * point_cloud_value[2])   # 计算距离print(f"Distance to Camera at {{{x};{y}}}: {distance}")view = np.concatenate((cv2.resize(img,(640,360)),cv2.resize(dep_map,(640,360))),axis=1)  # 原图和深度图拼接cv2.imshow("View", view)key = cv2.waitKey(1)if key & 0xFF == 27:  # esc退出breakif key & 0xFF == ord('s'):  # 图像保存savePath = os.path.join("./images", "V{:0>3d}.png".format(i))  # 注意根目录是否存在"./images"文件夹cv2.imwrite(savePath, view)i = i + 1# 关闭相机zed.close()if __name__ == "__main__":main()

5. 实验效果

深度图和原图拼接
请添加图片描述
计算画面中心点深度值
请添加图片描述

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

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

相关文章

iview中基于upload源代码组件封装更为完善的上传组件

业务背景 最近接了一个用iview为基础搭建的vue项目,在开需求研讨会议的时候,我个人提了一个柑橘很合理且很常规的建议,upload上传文件支持同时上传多个并且可限制数量。当时想的是这不应该很正常吗,但是尴尬的是:只有…

【Proteus】蜂鸣器播放音乐

按键按一次&#xff0c;蜂鸣器响一次 &#xff0c;LCD1602同步。 #include <REGX52.H> #include <INTRINS.H>unsigned int keynum; sbit RSP3^0; //** sbit RWP3^1; //** sbit EP3^2; //** sbit buzzerP1^5; void delay(unsigned int n)//1ms {unsigned char a,…

SpringMVC接收参数方式讲解

PathVariable 该注解用于接收具有Restful风格的参数&#xff0c;如/api/v1/1001&#xff0c;最终userId的值为1001。 如下代码中&#xff0c;使用name属性可以指定GetMapping中的id名称与之对应&#xff0c;从而可以自定义参数名称userId&#xff0c;而不是使用默认名称id G…

虹科Pico汽车示波器 | 免拆诊断案例 | 2016款保时捷911 GT3 RS车发动机异响

一、故障现象 一辆2016款保时捷911 GT3 RS车&#xff0c;搭载4.0 L水平对置发动机&#xff08;型号为MA176&#xff09;&#xff0c;累计行驶里程约为4.2万km。车主反映&#xff0c;1星期前上过赛道&#xff0c;现在发动机有“哒哒”异响。 二、故障诊断 接车后试车&#xff…

51.基于SpringBoot + Vue实现的前后端分离-校园志愿者管理系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的校园志愿者管理系统设计与实现管理工…

正则表达式中 “$” 并不是表示 “字符串结束”

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 作者&#xff1a;Seth Larson 译者&#xff1a;豌豆花下猫Python猫 英文&#xff1a;Regex character “$” doesnt mean “end-of-string” 转载请保留作者及译者信息&#xff01; 这篇文章写一写我最近在用 Python …

C++ 内存分区管理

一、栈区&#xff08;Stack&#xff09; 栈区用来存储函数的参数值、局部变量的值等数据。栈区是自动分配和释放的&#xff0c;函数执行时会在栈区分配空间&#xff0c;函数执行结束时会自动释放这些空间。栈区的数据是连续分配的&#xff0c;由系统自动管理。 注意事项&…

普通人赚钱途径大盘点:从搬砖到玩转智慧,财富之路任你探索

在生活的大舞台上&#xff0c;每个人都在以自己的方式演绎着赚钱的故事。作为普通人&#xff0c;我们或许没有显赫的财富背景&#xff0c;但赚钱的途径却是多种多样&#xff0c;等待我们去发掘。今天&#xff0c;就让我来为大家盘点一下普通人赚钱的常见途径&#xff0c;看看哪…

P2483 【模板】k 短路 / [SDOI2010] 魔法猪学院

题目&#xff1a; 题目背景 注&#xff1a;对于 kk 短路问题&#xff0c;A* 算法的最坏时间复杂度是 O(nk \log n)O(nklogn) 的。虽然 A* 算法可以通过本题原版数据&#xff0c;但可以构造数据&#xff0c;使得 A* 算法在原题的数据范围内无法通过。事实上&#xff0c;存在使用…

部署ELFK+zookeeper+kafka架构

目录 前言 一、环境部署 二、部署ELFK 1、ELFK ElasticSearch 集群部署 1.1 配置本地hosts文件 1.2 安装 elasticsearch-rpm 包并加载系统服务 1.3 修改 elasticsearch 主配置文件 1.4 创建数据存放路径并授权 1.5 启动elasticsearch是否成功开启 1.6 查看节点信息 …

蓝桥杯2023年第十四届省赛真题-冶炼金属

思路&#xff1a;用二分模板&#xff0c;边界r得包含所有的v&#xff0c;check分为小于&#xff0c;大于&#xff0c;等于三种情况。 #include<bits/stdc.h> using namespace std; #define int long long #define endl \n int n; const int N 1e410; int a[N],b[N];int…

【Conda基础命令】使用conda创建、查看、删除虚拟环境及可能的报错处理

文章目录 前言&#xff08;1&#xff09; 在默认路径下创建一个新的虚拟环境&#xff08;2&#xff09; 查看已有的虚拟环境&#xff08;3&#xff09; 删除已有的虚拟环境&#xff08;谨慎操作&#xff09;&#xff08;4&#xff09;激活虚拟环境&#xff08;5&#xff09;退出…

数据结构(七)---树

目录 一.树的基本概念 二.树的性质 三.二叉树 1.二叉树的基本概念 2.特殊的二叉树 &#xff08;1&#xff09;满二叉树 &#xff08;2&#xff09;完全二叉树 &#xff08;3&#xff09;二叉排序树 &#xff08;4&#xff09;平衡二叉树 3.二叉树的性质 4.完全二叉树…

【运维自动化-配置平台】如何创建业务及拓扑(集群-模块)

业务&#xff0c;是蓝鲸 CD 体系中比较重要的概念和维度&#xff0c;日常使用中主机、进程、业务拓扑的管理都需要依赖已经存在的业务&#xff0c;其他蓝鲸体系产品也基本上都是围绕业务的维度来提供对应的服务和相关的鉴权。1、创建业务/业务集 请确保有创建业务的权限&#…

关于CAS

什么是CAS: CAS:Compare And Swap&#xff0c;比较且交换。 CAS中有三个参数&#xff1a;1.内存中原数据的值V 2.预期值A 3.修改后的数据B Compare&#xff1a;V与A会先比较是否一样 Swap&#xff1a;如果V与A一致&#xff0c;那么就将B写入V 返回操作是否成功 伪代码&…

[生活][杂项] 如何正确打开编织袋

编织袋打开的正确姿势 面对单线分离右边的线头&#xff0c;然后依次拉开即可

java 中的 Math.round(-1.5) 等于多少?

Math提供了三个与取整有关的方法&#xff1a;ceil、floor、round &#xff08;1&#xff09;ceil&#xff1a;向上取整&#xff1b; Math.ceil(11.3) 12; Math.ceil(-11.3) 11; &#xff08;2&#xff09;floor&#xff1a;向下取整&#xff1b; Math.floor(11.3) 11; …

产品推荐 | 基于Lattice用于原型和FPGA设计和开发的Avant-E 评估板

01 产品概述 莱迪思半导体Avant-E评估板使设计人员能够快速进行原型设计和FPGA设计测试。它提供对所有 I/O 的访问&#xff0c;以及广泛的内存选项&#xff0c;以实现更快的原型设计和开发。 Avant-E评估板采用LFG1156封装的Avant-E FPGA。该板可以通过 FMC HPC、PMAD 和 Ras…

vue--样式绑定--样式切换方法

1.通过改变类名的方法改变盒子样式 可以通过 :class变量名来动态改变标签的样式名&#xff0c;变量值可以是字符串、数组、对象 1.字符串写法 适用于样式类名不确定需要动态指定 <div classbase :classa>Text</div> data:{ a:normal } classbase和 :classa可…

【C语言】数组相关选择题

目录 前言 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 题目七&#xff1a; 题目八&#xff1a; 题目九&#xff1a; 题目十&#xff1a; 前言 一些数组选择题 题目一&#xff1a; 关于数…