You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Open3D点云中为障碍物添加文本标签?

问题:点云中为障碍物添加3D文本标注

我需要在点云中为特定障碍物点添加文本标注,当前点云代码如下:

import open3d as o3d
import numpy as np

pcd = o3d.geometry.PointCloud()                                 # 创建点云对象
pcd.points = o3d.utility.Vector3dVector(img)
obstacles = find_cluster(potential_obstacles)

o3d.visualization.draw_geometries([ pcd, obstacles ],
                                    zoom=0.41999999999999962,
                                    front=[ -0.49481467211023333, 0.062416027669252132, -0.86675410570382283 ],
                                    lookat= [ 0.20215540690279493, 0.25826321104010441, 2.5327259417027266 ],
                                    up=[ 0.068492446325020648, 0.99711550943685279, 0.032702379682518497 ],
                                    width=1920,
                                    height=1080)

其中find_cluster()函数返回带编号标签的彩色障碍物点云,以及对应的[x,y,z]位置数组。我尝试用o3d.visualization.gui.Label3D('sample Text', [0, 0, 0])添加文本,但不知道如何将其关联到可视化窗口。

解决方案

o3d.visualization.draw_geometries是简化的可视化接口,不支持添加Label3D这类GUI元素。需要改用Open3D的O3DVisualizer窗口来实现,步骤如下:

  1. 初始化可视化窗口
  2. 将点云和障碍物点云添加到窗口场景
  3. 遍历障碍物位置数组,创建对应编号的Label3D并添加到窗口
  4. 设置窗口视角参数(与原代码的视角一致)
  5. 启动窗口事件循环

完整代码示例:

import open3d as o3d
import numpy as np

# 初始化点云
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(img)
# 获取障碍物点云和位置数组(假设返回格式为(obstacle_pcd, obstacle_positions, labels))
obstacle_pcd, obstacle_positions, labels = find_cluster(potential_obstacles)

# 创建可视化窗口
app = o3d.visualization.gui.Application.instance
app.initialize()

window = app.create_window("点云障碍物标注", width=1920, height=1080)
scene = window.scene

# 添加点云和障碍物到场景
scene.add_geometry("点云", pcd)
scene.add_geometry("障碍物", obstacle_pcd)

# 添加3D文本标注
for idx, (pos, label) in enumerate(zip(obstacle_positions, labels)):
    # 创建Label3D,文本为障碍物编号,位置为障碍物中心
    label_3d = o3d.visualization.gui.Label3D(str(label), pos)
    # 可自定义文本大小和颜色
    label_3d.text_size = 12
    label_3d.color = (1.0, 0.0, 0.0)  # 红色文本
    # 添加到场景
    scene.add_3d_label(label_3d)

# 设置视角参数,与原代码一致
view = scene.view
view.set_zoom(0.41999999999999962)
view.set_front([-0.49481467211023333, 0.062416027669252132, -0.86675410570382283])
view.set_lookat([0.20215540690279493, 0.25826321104010441, 2.5327259417027266])
view.set_up([0.068492446325020648, 0.99711550943685279, 0.032702379682518497])

# 运行窗口
app.run()

说明

  • 假设find_cluster返回的结构包含障碍物点云、位置数组和编号标签,你需要根据实际返回格式调整变量解构部分
  • Label3D的text_size和color可根据需求自定义
  • 使用O3DVisualizer可以支持更多交互和GUI元素,比如文本标注、按钮等

内容的提问来源于stack exchange,提问作者av_bb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:12:40