当前位置: 首页 > 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.lryc.cn/news/587024.html

相关文章:

  • cmap=‘brg’ 在编程中的使用指南
  • python代码块的表示方法
  • 2.3 单链表的应用
  • LLM对话框项目总结II
  • 封装---优化try..catch错误处理方式
  • Autotab:用“屏幕录制”训练AI助手,解锁企业级自动化新范式
  • Struts2框架对重定向URL处理不当导致的OGNL注入漏洞(s2-057)
  • [Rust 基础课程]选一个合适的 Rust 编辑器
  • Java设计模式之行为型模式(命令模式)介绍与说明
  • 高效图片工厂:Python批量生成定制尺寸和格式的图片
  • 动物世界一语乾坤韵芳华 人工智能应用大学毕业论文 -仙界AI——仙盟创梦IDE
  • EtherCAT开源主站 SOEM 2.0 最新源码在嵌入式 Linux 下的移植与编译
  • Maven 构建命令
  • Java结构型模式---外观模式
  • 扩散模型(Diffusion Model)原理概述
  • Python装饰器(自定义装饰器和3个内置装饰器)
  • Java 大视界 -- Java 大数据在智能教育学习资源智能分类与标签优化中的应用(346)
  • Java小白-线程 vs 虚拟线程,Java并发的新旧对决
  • 垃圾收集器-Serial Old
  • 教程:如何查看浏览器扩展程序的源码
  • 【操作系统-Day 5】通往内核的唯一桥梁:系统调用 (System Call)
  • 飞算 JavaAI 智能编程助手:颠覆编程旧模式,重构开发生态
  • 【Linux | 网络】应用层
  • 算法学习笔记:19.牛顿迭代法——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 在 Spring Boot 中使用 MyBatis 的 XML 文件编写 SQL 语句详解
  • 飞算JavaAI:开启 Java 开发 “人机协作” 新纪元
  • [Linux入门 ] RAID存储技术概述
  • [Dify]-基础入门6-Dify 的工作流 (Workflow) 详解(入门篇)
  • [Rust 基础课程]Hello World
  • Linux进程状态实战指南:转换关系、监控命令与状态解析