如何通过Open3D VisualizerWithEditing获取点云选中点的坐标
获取Open3D点云选中点的XYZ坐标
你可以通过点云对象的points属性,配合pick_points返回的索引直接获取对应点的XYZ坐标,以下是两种可行方案:
方案一:修改pick_points函数直接返回坐标
修改原函数,在获取选中点索引后,直接提取对应的坐标并返回:
def pick_points_with_coords(pcd): print("") print( "1) Please pick at least three correspondences using [shift + left click]" ) print(" Press [shift + right click] to undo point picking") print("2) After picking points, press 'Q' to close the window") vis = o3d.visualization.VisualizerWithEditing() vis.create_window() vis.add_geometry(pcd) vis.run() # 用户选择点 vis.destroy_window() print("") picked_indices = vis.get_picked_points() # 提取对应坐标 picked_coords = [pcd.points[idx] for idx in picked_indices] return picked_indices, picked_coords
调用示例:
# 假设已加载点云pcd indices, coords = pick_points_with_coords(pcd) # 打印结果 for idx, coord in zip(indices, coords): print(f"选中点索引 {idx},坐标:({coord[0]:.2f}, {coord[1]:.2f}, {coord[2]:.2f})")
方案二:调用原函数后处理索引
如果不想修改原函数,在拿到索引后手动提取坐标:
# 调用原函数获取选中点索引 picked_indices = pick_points(pcd) # 方式1:直接通过点云的points属性索引 picked_coords = [pcd.points[i] for i in picked_indices] # 方式2:转为numpy数组(更适合批量操作) import numpy as np pcd_points_np = np.asarray(pcd.points) picked_coords_np = pcd_points_np[picked_indices]
原理说明
Open3D的PointCloud对象的points属性是Vector3dVector类型,支持直接通过索引访问单个点的坐标;转为numpy数组后,可利用numpy的批量索引能力快速获取多个点的坐标,方便后续数值计算或数据处理。
内容的提问来源于stack exchange,提问作者Chri
相关产品推荐
相关产品推荐

