自定义 open3d可视化

到今天接触 open3d 断断续续也有一年多了,随着工作和学习也沉淀一些内容,今天想拿出来跟大家分享一下,首先要分析点云,少不了对点云进行可视化来更直观观察点云,或者用可视化将点云呈现给用户。

css 复制代码
o3d.visualization.draw_geometries([pcd])

读取点云文件然后调用上面方法将 pcd 传入 draw_geometries 不过这样创建窗口样式,例如背景、点云点的大小等是固定,有的时候我们需要对窗口样式进行调整,并且随后会介绍如何窗口内几何体或点云进行交互。

python 复制代码
vis = o3d.visualization.Visualizer()
vis.create_window()
vis.add_geometry(pcd)
vis.run()
vis.destroy_window()
  • 实例化 Visualizer 对象
  • 然后创建一个窗口
  • add_geometry 可以将点云和要绘制的几何体添加到窗口
  • vis.run() 运行将窗口显示出来
  • destroy_window() 做一些收尾的工作

有的时候客户有些特殊需求,可能需要将背景颜色修改为黑色。接下来我们

python 复制代码
vis = o3d.visualization.Visualizer()
vis.create_window()
scss 复制代码
vis.add_geometry(pcd)
ini 复制代码
opt = vis.get_render_option()
opt.background_color = np.asarray([0,0,0])
vis.run()
vis.destroy_window()

首先获取渲染选项对象 get_render_option() 的句柄 opt 然后通过修改 opt 提供一个属性来控制背景颜色,然后调用 vis.run() 来将点云显示出来,最后还需要对资源进行回收。

python 复制代码
vis.create_window(width=600,height=320)

也可以通过传入 width=600 和 height=320 参数指定窗口大小

python 复制代码
opt = vis.get_render_option()
opt.point_size = 0.1
opt.show_coordinate_frame =True
opt.background_color = np.asarray([0,0,0])
  • show_coordinate_frame 用于控制是否显示显示参考坐标系
python 复制代码
import copy

import numpy as np
import open3d as o3d
import glob
ini 复制代码
pcd_path = "./dataset/pointcloud/<.pcd>"
pcd = o3d.io.read_point_cloud(pcd_path)
print(dir(pcd))
print(pcd.get_center())
print(np.asarray(pcd.colors))
print(np.asarray(pcd.points))

# o3d.visualization.draw_geometries([pcd])
pcd.paint_uniform_color([0,1,0])
# 初始化
vis = o3d.visualization.Visualizer()
# 可以指定宽度
vis.create_window(width=1280,height=720)
vis.add_geometry(pcd)

mesh_box_1 = o3d.geometry.TriangleMesh.create_box(width=1.0,height=1.0,depth=2.0)
mesh_box_1.paint_uniform_color([0.9,0.1,0.1])

mesh_box_2 = copy.deepcopy(mesh_box_1).translate((1.5,0,0))

vis.add_geometry(mesh_box_1)
vis.add_geometry(mesh_box_2)


ctr = vis.get_view_control()
ctr.rotate(10.0,0.0)

opt = vis.get_render_option()
opt.point_size = 0.1
opt.show_coordinate_frame =True
opt.background_color = np.asarray([0,0,0])

vis.run()
vis.destroy_window()
ini 复制代码
ctr = vis.get_view_control()
ctr.rotate(10.0,0.0)

可以通过 get_view_control() 获取对视图控制的句柄,然后可以观察视角

相关推荐
深蓝AI1 小时前
无头浏览器不必从 Chrome 改:Lightpanda 用 Zig 从零造,100 个页面只占 123MB 内存
人工智能·程序员
奈落243 小时前
AI辅助的另一面:从2026年国际AI安全报告的“故障”清单到国内专家的可靠性短板,自主行动的Agent为什么更难及时干预
人工智能·安全·agent·本地部署·ai 办公
火山引擎开发者社区5 小时前
eMudhra 证书失陷:容器用户最容易忽略的镜像信任链漏洞
人工智能
LabVIEW开发6 小时前
LabVIEW 机载 DIAL:每秒万次甲烷测量
人工智能·labview·labview知识·labview功能·labview程序
飞猫的边缘AI7 小时前
英特尔量子生意
人工智能·量子计算·边缘ai
深蓝AI7 小时前
桌面 Agent 缺的不是视觉:Vercel 开源 agent-desktop,用无障碍树 ref 替代截图坐标
人工智能·程序员
镜子AI7 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
向哆哆8 小时前
羊行为目标检测数据集:4类别、2,000张图像 | 目标检测
人工智能·yolo·目标检测·目标跟踪
如若1238 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python
赛博守夜人9 小时前
AI安全攻防与治理之十六:对抗样本、恶意文件与多模态攻击,AI 内容安全检测的真实盲区
人工智能·安全