深度相机xyz点云文件三维坐标和jpg图像文件二维坐标的相互变换函数

深度相机同时拍摄xyz点云文件和jpg图像文件。xyz文件里面包含三维坐标[x,y,z]和jpg图像文件包含二维坐标[x,y],但是不能直接进行变换,需要一定的步骤来推演。
在这里插入图片描述

下面函数是通过box二维框[xmin, ymin, xmax, ymax, _, _ ]去截取xyz文件中对应box里面的点云,返回点云的numpy数组

    def get_point_from_xyz_and_box(self, Image_XYZ_Name, box, p=0.1, Sampling_interval=4):#改进的读取点云的函数,可以节省很多时间# 使用内存映射读取文件with open(Image_XYZ_Name, "rb") as fd:# 计算映射大小和偏移dtype = np.dtype(np.uint16)offset = dtype.itemsize * self.width * self.height * 3  #根据文件格式调整fd.seek(0, 2)  # 移动到文件末尾file_size = fd.tell()assert file_size >= offset, "文件大小不匹配"# 创建内存映射mm = np.memmap(fd, dtype=dtype, mode='r', shape=(self.height, self.width, 3), order="C")# 转换为3D点云,只读取box范围内的xmin, ymin, xmax, ymax, _, _ = boxy_indices = np.arange(ymin, ymax, Sampling_interval, dtype=int)x_indices = np.arange(xmin, xmax, Sampling_interval, dtype=int)# 构建网格索引y_grid, x_grid = np.meshgrid(y_indices, x_indices, indexing='ij')depth_points = mm[y_grid, x_grid].reshape(-1, 3) * p# print('mm',mm) # print(y_grid, x_grid) # 过滤无效点(假设深度值为0表示无效点)valid_points = depth_points[depth_points[:, 2] != 0]return valid_points

下面函数是知道点云中的一个点[x,y,z]来计算出这个点对应的二维坐标[y,x]

 def calculate_box_from_points_and_xyz(self, point, p=0.1):with open(self.XYZ_Name, "rb") as fd:# 计算映射大小和偏移dtype = np.dtype(np.uint16)offset = dtype.itemsize * self.width * self.height * 3  # 根据文件格式调整fd.seek(0, 2)  # 移动到文件末尾file_size = fd.tell()assert file_size >= offset, "文件大小不匹配"# 创建内存映射a = np.memmap(fd, dtype=dtype, mode='r', shape=(self.height, self.width, 3), order="C")# 将所有点的坐标转换为KD树需要的格式,并除以ppoints = np.reshape(a, (-1, 3)) kd_tree = KDTree(points)# 查找最接近的点point_idx = kd_tree.query(point / p)[1]# 将一维索引转换回二维索引matching_indice = np.unravel_index(point_idx, (self.height, self.width))return matching_indice

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

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

相关文章

使用OpenTelemetry进行监控

工具介绍 注意:该部分介绍摘抄自:搭建高级的性能监控系统(PrometheusGrafanaNode ExporterAlertmanager) - 爱云 Prometheus、Grafana、Node Exporter 和Alertmanager是一组用于监控和可视化系统性能的开源工具。它们通常一起使用,形成一个强…

课题学习(二十)----阅读《近钻头井斜动态测量重力加速度信号提取方法研究》论文

摘要:利用加速度计进行近钻头井斜动态测量时, 钻具的高速旋转、 井下强振动、强冲击环境给重力加速度测量带来极大干扰,如何从干扰噪声中有效提取重力加速度信号对于提高井斜角和工具面角的测量精度至关重要。 根据重力加速度径向和切向分量为…

视频云平台——搭建SRS5平台支持GB28181视频流的推送

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅…

网络编程作业day3

项目作业1&#xff1a;TCP机械臂测试 客户端操作代码&#xff1a; /*机械臂客户端控制代码*/ #include <myhead.h>#define SER_IP "192.168.125.176" //机械臂服务器IP地址 #define SER_PORT 8888 //机械臂服务器端口号 #define CLI_IP "…

php开发项目 docx,pptx,excel表格上传阿里云,腾讯云存储后截取第一页生成缩略图

服务器或者存储上传的word,ppt和excel表格需要截取内容展示的时候,就需要管理后台每次上传文件时根据不同文件类型截取图片保存起来,并讲图片的地址保存到数据字段中.网上搜索了很多相关文章遇到的坑不少,经过2天时间终于完成了,将代码和遇到的问题完整记录下来. 本文用的…

【VPX637】基于XCKU115 FPGA+ZU15EG MPSOC的6U VPX双FMC接口通用信号处理平台

VPX637是一款基于6U VPX总线架构的通用实时信号处理平台&#xff0c;该平台采用一片Xilinx的高性能Kintex UltraScale系列FPGA&#xff08;XCKU115-2FLVF1924I&#xff09;作为预处理单元&#xff0c;外挂2个FMC扩展接口&#xff0c;来完成数据采集、数据回放以及实时信号处理算…

基于springboot音乐翻唱与分享平台源码和论文

1.1研究背景 随着网络不断的普及发展&#xff0c;音乐网站与分享平台依靠网络技术的支持得到了快速的发展&#xff0c;首先要从用户的实际需求出发&#xff0c;通过了解用户的需求开发出具有针对性的首页、音乐资讯、音乐翻唱、在线听歌、留言反馈、个人中心、后台管理、客服功…

docker部署aria2-pro

前言 我平时有一些下载视频和一些资源文件的需求&#xff0c;有时候需要离线下载&#xff0c;也要速度比较快的方式 之前我是用家里的玩客云绝育之后不再写盘当下载机用的&#xff0c;但是限制很多 我发现了aria2 这个下载器非常适合我&#xff0c;而有个大佬又在原来的基础…

【Linux】信号的保存

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 信号在Linux中的保存主要涉及方面 信号的类型&#xff1a; 信号处理程序&#xff1a; 信号的传递和处理&#xff1a; 信号的阻…

华为OD机试真题C卷-篇6

100分值题 宽度最小的子矩阵部门人力分配电脑病毒感染会议室占用时间段路口最短时间问题5G网络建设 宽度最小的子矩阵 给定一个n行 * m列的矩阵&#xff1b;给定一个k个整数的数组k_list&#xff1b;在n*m的矩阵中找一个宽度最小的子矩阵&#xff0c;该子矩阵包含k_list中所有…

YOLOv5-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

MAC 的vscode菜单栏怎么调?

我去&#xff0c;这个bug找到了半天&#xff0c;终于找到正解了&#xff0c;仅记录&#xff0c;为广大和我一样不熟悉mac的兄弟们避坑。 正解&#xff1a;mac的vscode的菜单栏在屏幕最顶上&#xff0c;不用调出来&#xff0c;人家一直都有。