PCD点云文件外部框框坐标计算

news2024/11/28 12:38:54

PCD点云文件直接提取的是点云的坐标,不是最外面的box的坐标,因此可以通过:

max_b = octree.get_max_bound()
min_b = octree.get_min_bound()

分别得到最大最小的xyz坐标,之后进行计算

点的序号和位置对应如下:
在这里插入图片描述

所有的代码如下,注意将pcd文件和代码置于同一文件夹中:

import numpy as np
import open3d as o3d

# --------------------------- 加载点云 ---------------------------
print("->正在加载点云... ")
pcd = o3d.io.read_point_cloud("clean.pcd")

# ------------------------- 构建Octree --------------------------

octree = o3d.geometry.Octree(max_depth=4)
octree.convert_from_point_cloud(pcd, size_expand=0.0)
s = octree.size

max_b = octree.get_max_bound()
min_b = octree.get_min_bound()
x_max, y_max, z_max = max_b
x_min, y_min, z_min = min_b

pb_1 = [x_max, y_max, z_min]
pb_2 = [x_max, y_max - (s / 2), z_min]
pb_3 = [x_max, y_min, z_min]
pb_4 = [x_max - (s / 2), y_min, z_min]
pb_5 = [x_min, y_min, z_min]
pb_6 = [x_min, y_min + (s / 2), z_min]
pb_7 = [x_min, y_max, z_min]
pb_8 = [x_min + (s / 2), y_max, z_min]
pb_9 = [x_max - (s / 2), y_max - (s / 2), z_min]
pb = [pb_1, pb_2, pb_3, pb_4, pb_5, pb_6, pb_7, pb_8, pb_9]

pu_1 = [x_max, y_max, z_max]
pu_2 = [x_max, y_max - (s / 2), z_max]
pu_3 = [x_max, y_min, z_max]
pu_4 = [x_max - (s / 2), y_min, z_max]
pu_5 = [x_min, y_min, z_max]
pu_6 = [x_min, y_min + (s / 2), z_max]
pu_7 = [x_min, y_max, z_max]
pu_8 = [x_min + (s / 2), y_max, z_max]
pu_9 = [x_max - (s / 2), y_max - (s / 2), z_max]
pu = [pu_1, pu_2, pu_3, pu_4, pu_5, pu_6, pu_7, pu_8, pu_9]

pm_1 = [x_max, y_max, z_max - (s / 2)]
pm_2 = [x_max, y_max - (s / 2), z_max - (s / 2)]
pm_3 = [x_max, y_min, z_max - (s / 2)]
pm_4 = [x_max - (s / 2), y_min, z_max - (s / 2)]
pm_5 = [x_min, y_min, z_max - (s / 2)]
pm_6 = [x_min, y_min + (s / 2), z_max - (s / 2)]
pm_7 = [x_min, y_max, z_max - (s / 2)]
pm_8 = [x_min + (s / 2), y_max, z_max - (s / 2)]
pm_9 = [x_max - (s / 2), y_max - (s / 2), z_max - (s / 2)]
pm = [pm_1, pm_2, pm_3, pm_4, pm_5, pm_6, pm_7, pm_8, pm_9]

print("最下面的9个点的坐标分别为: ")
for i in range(9):
    print("{}: {}".format(i + 1, pb[i]))

print("中间的的9个点的坐标分别为: ")
for i in range(9):
    print("{}: {}".format(i + 1, pm[i]))

print("最上面的9个点的坐标分别为: ")
for i in range(9):
    print("{}: {}".format(i + 1, pu[i]))

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

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

相关文章

UML用例图三种关系(重点)-架构真题(十七)

某项目包括A、B、C、D四道工序,各道工序之间的衔接关系、正常进度下各工序所需的时间和直接费用、赶工进度下所需的时间和直接费用如下表所示。该项目每天需要间接费用为4.5万元,根据此表,最低成本完成需要()天。&…

selenium可以编写自动化测试脚本吗?

Selenium可以用于编写自动化测试脚本,它提供了许多工具和API,可以与浏览器交互,模拟用户操作,检查网页的各个方面。下面是一些步骤,可以帮助你编写Selenium自动化测试脚本。 1、安装Selenium库和浏览器驱动程序 首先…

【QT】使用qml的QtWebEngine遇到的一些问题总结

在使用qt官方的一些QML的QtWebEngine相关的例程的时候,有时在运行会报如下错误: WebEngineContext used before QtWebEngine::initialize() or OpenGL context creation failed 这个问题在main函数里面最前面加上: QCoreApplication::setAttr…

深度学习推荐系统(二)Deep Crossing及其在Criteo数据集上的应用

深度学习推荐系统(二)Deep Crossing及其在Criteo数据集上的应用 在2016年, 随着微软的Deep Crossing, 谷歌的Wide&Deep以及FNN、PNN等一大批优秀的深度学习模型被提出, 推荐系统全面进入了深度学习时代, 时至今日&#xff0c…

【数据分享】2000-2020年全球人类足迹数据(无需转发\免费获取)

人类足迹(Human Footprint)是生态过程和自然景观变化对生态环境造成的压力,是世界各国对生物多样性和生态保护的关注重点。那如何才能获取长时间跨度的人类足迹时空数据呢? 之前我们分享了来自于中国农业大学土地科学与技术学院的城市环境监测及建模&am…

实时语义分割网络 BiSeNet , RK1126 Npu 推理

记录下在rk1126上,实现 BiSeNet 网络推理. https://github.com/CoinCheung/BiSeNet ONNX 生成 onnx 模型 python tools/export_onnx.py --config configs/bisenetv2_city.py --weight-path ./checkpoints/model_final_v2_city.pth --outpath ./checkpoints/mode…

每日一题(反转链表)

每日一题(反转链表) 206. 反转链表 - 力扣(LeetCode) 思路: 可以定义一个新的newhead结构体指针。再定义cur指针和next指针互相配合,将原链表中的节点从头到尾依次头插到newhead链表中,同时更…

使用爬虫代码获得深度学习目标检测或者语义分割中的图片。

问题描述:目标检测或者图像分割需要大量的数据,如果手动从网上找的话会比较慢,这时候,我们可以从网上爬虫下来,然后自己筛选即可。 代码如下(不要忘记安装代码依赖的库): # -*- co…

记一次特殊的HTTP 500.30

此错误比较常见,网上的解决方式各种各样,今天遇到的情况是,除过配置文件别的程序集都一样,程序部署端口不同,最后检查原因竟然是appsettings配置文件 key值的格式问题(中英文字符或者空格导致,粘…

【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之键控流水灯(三)

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光同创PGL22G开发…

Java8实战-总结17

Java8实战-总结17 引入流流操作中间操作终端操作使用流 小结 引入流 流操作 java.util.stream.Stream中的Stream接口定义了许多操作。它们可以分为两大类。再来看一下前面的例子&#xff1a; List<String> names menu.stream() //从菜单获得流 .filter(d -> d.get…

基于Java的OA办公管理系统,Spring Boot框架,vue技术,mysql数据库,前台+后台,完美运行,有一万一千字论文。

基于Java的OA办公管理系统&#xff0c;Spring Boot框架&#xff0c;vue技术&#xff0c;mysql数据库&#xff0c;前台后台&#xff0c;完美运行&#xff0c;有一万一千字论文。 系统中的功能模块主要是实现管理员和员工的管理&#xff1b; 管理员&#xff1a;个人中心、普通员工…

etcd读写请求的执行过程

etcd读请求如何执行 首先&#xff0c;etcdctl 会对命令中的参数进行解析。在解析完请求中的参数后&#xff0c;etcdctl 会创建一个 clientv3 库对象通过gRPC API来访问 etcd server。对应流程一。 然后通过负载均衡算法选择一个etcd server节点&#xff0c;然后调用 etcd ser…

Redis之管道解读

目录 基本介绍 使用例子 管道对比 管道与原生批量命令对比 管道与事务对比 使用pipeline注意事项 基准测试 基本介绍 Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务器。 这意味着请求通常按如下步骤处理&#xff1a; 客户端发送一个请求到服务器&am…

飞天使-python的模块与包与装饰器

文章目录 模块与包标准模块第三方模块自定义模块 高级语法切片迭代器/生成器高级模式&#xff08;闭包&#xff09;高级模式&#xff08;装饰器&#xff09; 参考视频 模块与包 标准模块 import os print(os.getcwd())import sys print(sys.argv) print(sys.platform) print(…

Three.js相机参数及Z-Fighting问题的解决方案

本主题讨论透视相机以及如何为远距离环境设置合适的视锥体。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 透视相机是一种投影模式&#xff0c;旨在模仿人类在现实世界中看待事物的方式。 这是渲染 3D 场景最常用的投影模式。 - three.js 如果你看一下 Three.js 文档…

十四、组合模式

一、什么是组合模式 组合&#xff08;Composite Pattern&#xff09;模式的定义&#xff1a;有时又叫作整体-部分&#xff08;Part-Whole&#xff09;模式&#xff0c;它是一种将对象组合成树状的层次结构的模式&#xff0c;用来表示“整体-部分”的关系&#xff0c;使用户对单…

极限五分钟,在宝塔中用 Docker 部署升讯威在线客服系统

最近客服系统成功经受住了客户现场组织的压力测试&#xff0c;获得了客户的认可。 客户组织多名客服上线后&#xff0c;所有员工同一时间打开访客页面疯狂不停的给在线客服发消息&#xff0c;系统稳定无异常无掉线&#xff0c;客服回复消息正常。消息实时到达无任何延迟。 本文…

IDEA maven上传速度很慢、解决办法

maven上传的速度很慢&#xff0c;排除网络原因&#xff0c;需要检查配置 一、项目配置 以下针对于maven仓库不在C盘的情况&#xff1a; File | Settings | Build, Execution, Deployment | Build Tools | Maven 以IDEA为例&#xff0c;打开 File&#xff08;文件&#xff09;…

【Vue3+Ts】项目启动准备和配置项目代码规范和css样式的重置

项目启动准备 创建项目&#xff08; 使用Vite 构建工具创建项目模板&#xff09;目录介绍插件安装创建别名编译说明项目配置配置icon和标题配置项目别名配置ts.config.json检测vscode的插件是否配置 配置项目代码规范集成editorconfig配置prettier工具库ESLint检测配置 CSS样式…