深度相机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.mzph.cn/news/719515.shtml

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

相关文章

MyCAT学习——在openEuler22.03中安装MyCAT2(网盘下载版)

准备工作 因为MyCAT 2基于JDK 1.8开发。也需要在虚拟机中安装JDK(JDK官网就能下载,我这提供一个捷径) jdk-8u401-linux-x64.rpmhttps://pan.baidu.com/s/1ywcDsxYOmfZONpmH9oDjfw?pwdrhel下载对应的tar安装包,以及对应的jar包 安装程序包…

九州金榜|孩子厌学要怎么办?

孩子从小学到初中再到高中,孩子出现厌学情绪很正常,但是孩子出现厌学情绪后,就必然会影响到孩子学习成绩,孩子产生厌学情绪的原因有哪些呢?只有找准孩子厌学原因才能去帮助孩子怎样去克服孩子厌学情绪,下面…

ajax请求servlet成功但接收不到返回数据问题

ajax请求servlet成功但接收不到返回数据问题 javaweb初学者,最近老师布置的课设,所有功能都完成了,唯独ajax与servlet交互出现问题,无论怎么调试都收不到数据 查询两天无果,刚才无意间看到 Crabime前辈的文章才恍然大…

深入解析YOLO:实时目标检测技术的革命者

深入解析YOLO:实时目标检测技术的革命者 目标检测作为计算机视觉领域的一个核心任务,一直以来都是研究的热点。而YOLO(You Only Look Once)技术作为其中的杰出代表,以其独特的处理方式和卓越的性能,成为了…

day34贪心算法 part03

1005. K 次取反后最大化的数组和 简单 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数…

力扣栈队列篇

以下思路来自代码随想录以及官方题解。 文章目录 232.用栈实现队列225.用队列实现栈20.有效的括号1047.删除字符串中所有相邻重复项150.逆波兰表达式求值347.前K个高频元素 232.用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff…

OSError: [WinError 1455] 页面文件太小,无法完成操作。

[问题描述]:OSError: [WinError 1455] 页面文件太小,无法完成操作。 原因1:线程数太大 方法:改小线程(workers)数。 原因2:虚拟内存太小或为0,调大虚拟内存。 方法:右键…

mysql索引过长Specialed key was too long的解决方法

在创建要给表的时候遇到一个有意思的问题,提示Specified key was too long; max key length is 767 bytes,从描述上来看,是Key太长,超过了指定的 767字节限制。通常出现在尝试创建一个过长的唯一键(UNIQUE KEY&#xf…

Vue.js 实用技巧:深入理解 Vue.mixin

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

uniapp真机运行的时候显示同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示

1、问题 在添加清单文件之前,项目运行都是好好的,添加了清单项目以后,基座一打就报这个错,并且手机在安装基座的时候会提示解析包时失败, 2、解决方案 打开我的清单文件,我发现我和官网写的清单文件不一…

华为OD机试“HJ2计算某字符出现次数”不区分大小写Java编程解答

描述 写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母) 数据范围: 1≤n≤1000 输入描述: 第一行输入一个由字…

【Linux进程间通信】共享内存

【Linux进程间通信】共享内存 目录 【Linux进程间通信】共享内存system V共享内存共享内存示意图共享内存的数据结构共享内存函数将共享内存挂接到对应的进程将共享内存取消挂接释放共享内存 共享内存的特性共享内存扩展共享内存配合管道进行使用 作者:爱写代码的刚…

用docker部署后端项目

一、搭建局域网 1.1、介绍前后端项目搭建 需要4台服务器,在同一个局域网中 1.2、操作 # 搭建net-ry局域网,用于部署若依项目 net-ry:名字 docker network create net-ry --subnet172.68.0.0/16 --gateway172.68.0.1#查看 docker network ls…

Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析

使用 SSH 密钥对的 Git 安全远程访问:生成、添加和连接 SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制。在使用 SSH 连接到远程 Git 存储库时,您可以使用 SSH 密钥对来确保安全性。…

3d模型合并后一片漆黑是什么原因,怎么解决---模大狮模型网

当合并多个3D模型后,发现整个合并后的模型显示为一片漆黑通常是由以下几个可能的原因导致的: 材质设置问题:合并后的模型可能存在材质设置错误,导致模型无法正确显示。检查每个模型的材质属性,确保其正确设置&#xff…

老隋蓝海项目有哪些?能赚钱吗?

在创业的海洋中,每个人都渴望找到那片属于自己的“蓝海”,而“老隋蓝海项目”便是许多人心中的那片未知海域。那么,老隋蓝海项目究竟是指什么?它们又能否成为创业者的新财富之源? 蓝海项目的定义 我们要明白,蓝海项目通常指的是…

【漏洞复现】某厂商明御WEB应用防火墙任意用户登录漏洞

Nx01 产品简介 安恒明御WEB应用防火墙(简称WAF)是杭州安恒信息技术股份有限公司自主研发的一款专业应用安全防护产品,专注于为网站、APP等Web业务系统提供安全防护。 Nx02 漏洞描述 安恒明御WEB应用防火墙report.php文件存在硬编码设置的Con…

yolov7添加spd-conv注意力机制

一、spd-conv是什么? SPD-Conv(Symmetric Positive Definite Convolution)是一种新颖的卷积操作,它主要应用于处理对称正定矩阵(SPD)数据。在传统的卷积神经网络(CNN)中,…

人工智能_大模型013_AIGC生成式模型的增强检索_RAG知识补充检索_补充私域和实时场景知识_关键字检索增强---人工智能工作笔记0149

什么是RAG,RAG的意思就是,如果一套生成式AIGC大模型,你昨天训练了以后,那么今天的知识,还没有给他进行训练,那么回答的时候,他就会遗漏今天的知识,那么我们就可以通过检索的手段,把今天的知识,检索出来,然后补充道prompt中,给这个大模型.让他参考,这样就包含了今天的知识相当于…

CY8C42(1.PSoC4 Pioneer Kit开箱及基本使用)

1.开箱 最近了解到赛普拉斯有一种芯片,属于PSoC系列,与传统MCU不同,有点类似跨界芯片,于是就买来玩玩了,老实说用完还是很特别的,因为我没有用过FPGA,不确定是不是FPGA的开发流程(有…