当前位置: 首页 > news >正文

【编程实践】利用open3d生成物体的最长边方向并可视化

1 利用3d软件生成一个长方体

边长随意,长度随意

2 导出为模型文件并采样为点云数据

从mesh表面进行采样,点数根据自己需求进行设置,此处设置为100000。
在这里插入图片描述
采样结果:
在这里插入图片描述

3 识别OBB外接框并可视化长边方向

import numpy as np
import open3d as o3d
def get_obb_longest_edge_direction(obb):"""计算长边方向"""# 获取OBB的旋转矩阵R = obb.R# 获取OBB的扩展长度extent = obb.extent# 计算长边索引longest_edge_index = np.argmax(extent)# 计算长边方向向量longest_edge_direction = R[:, longest_edge_index]return longest_edge_directiondef create_line_set_of_OBBLongdir(start_point, end_point):# 创建两个点points = [start_point, end_point]# 创建一条线段lines = [[0, 1]]# 创建lineset对象line_set = o3d.geometry.LineSet(points = o3d.utility.Vector3dVector(points), lines = o3d.utility.Vector2iVector(lines))# 设置线段颜色line_set.colors = o3d.utility.Vector3dVector([[0, 1, 0]])return line_setdef main():# 1. 读取点云数据file_path = "cahngfangti-Mesh-sample.pcd"  # 替换为你的点云文件路径pcd = o3d.io.read_point_cloud(file_path)# 2. 计算OBB外接框obb = pcd.get_oriented_bounding_box()obb.color = (1, 0, 0)  # 设置OBB颜色# 3. 获取OBB的最长边方向longest_edge_direction = get_obb_longest_edge_direction(obb)print(f"OBB的最长边方向为 {longest_edge_direction}")# 4. 获取OBB的中心点center_point = obb.get_center()end_point = center_point + longest_edge_direction * 20.0# 5. 创建直线line_set = create_line_set_of_OBBLongdir(center_point, end_point)o3d.visualization.draw_geometries([pcd, obb, line_set])if __name__ == "__main__":main()

在这里插入图片描述

http://www.dtcms.com/a/277450.html

相关文章:

  • 面向对象设计模式详解
  • CD49.【C++ Dev】容器适配器模式
  • 深入解析5G核心网容灾:UDM 故障场景下 SMF 容灾机制深度解析
  • C++ 单例模式实现
  • 【读书笔记】《C++ Software Design》第五章:The Strategy and Command Design Patterns
  • Java学习------设计模式(1)
  • ZKmall开源商城技术攻略:轻松掌握规则引擎与Spring Boot3接口的开发技巧
  • Linux V4L2应用编程常用结构体介绍
  • STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南
  • 面试150 从前序与中序遍历构造二叉树
  • STM32-第五节-TIM定时器-1(定时器中断)
  • Clojure和Golang中的Channel有什么异同(TBC)
  • 构建应用内智能:衡石嵌入式BI如何打造“指标中台”驱动的场景化分析
  • Python文件路径操作全面指南:从基础到高级应用
  • 深入理解数据库连接池:原理、实现与Druid实战
  • MCU中的系统控制器(System Controller)是什么?
  • Spring Boot + MyBatis 实现用户登录功能详解(基础)
  • PaperPel
  • Oracle SQL - 使用行转列PIVOT减少表重复扫描(实例)
  • AI驱动的软件工程(上):人机协同的设计与建模
  • 【读书笔记】《C++ Software Design》第六章深入剖析 Adapter、Observer 和 CRTP 模式
  • 实现“micro 关键字搜索全覆盖商品”并通过 API 接口提供实时数据(一个方法)
  • fatal: active `post-checkout` hook found during `git clone`
  • mapstruct与lombok冲突原因及解决方案
  • 【Linux 学习指南】网络基础概念(一):从协议到分层,看透计算机通信的底层逻辑
  • LeetCode|Day9|976. 三角形的最大周长|Python刷题笔记
  • 通过反射,提取 Cat 类 泛型 父类 接口 属性 的具体类型参数
  • 【一起来学AI大模型】部署优化推理加速:TensorRT-LLM
  • 华为交换机 undo negotiation auto功能(华为交换机端口接光纤两端起不来)
  • Jvm优化高手-笔记