函数签名: open3d.visualization.SelectionPolygonVolume.crop_in_polygon(polygon)
该函数将当前选中的3D体素区域(crop box)限制在用户定义的多边形区域(polygon)之内。
polygon
:一个由点坐标构成的列表,在3D空间中表示一个多边形。无返回值。该函数会直接修改当前选中的3D体素区域(crop box)。
import open3d as o3d
import numpy as np
# 创建点云对象
pcd = o3d.io.read_point_cloud("cloud.pcd")
# 创建一个默认大小的选区
selection = o3d.visualization.SelectionPolygonVolume()
# 渲染点云
vis = o3d.visualization.Visualizer()
vis.create_window()
vis.add_geometry(pcd)
# 注册selection object事件
vis.get_render_option().selection_polygon_volume = selection
# 鼠标自由画笔选区
vis.run()
vis.destroy_window()
# 对点云进行区域裁剪
selection.crop_in_polygon(polygon=selection.get_polygon())
cropped_pcd = selection.crop_point_cloud(pcd)
# 可视化裁剪后的点云和选区
vis_crop = o3d.visualization.Visualizer()
vis_crop.create_window()
vis_crop.add_geometry(cropped_pcd)
vis_crop.add_geometry(selection)
vis_crop.run()
vis_crop.destroy_window()
在上面的代码示例中,我们首先创建一个PointCloud对象并加载点云数据,然后创建一个默认大小的选区(SelectionPolygonVolume)对象,并创建一个可视化窗口,将点云对象添加到窗口中进行渲染,同时将选区对象的selection_polygon_volume
属性设置为刚刚创建的选区对象。
接下来,我们通过自由鼠标画笔选区的方式,对点云的感兴趣区域进行选择。当鼠标选区结束后,选区对象将路径点存储在其内部polygon属性中。
然后,我们调用该对象中的crop_in_polygon
函数,将选区裁剪在多边形区域之内。我们可以使用crop_point_cloud
函数来裁剪点云数据,得到裁剪后的点云数据(cropped_pcd)对象。
最后,我们再次创建一个可视化窗口,并在其中渲染裁剪后的点云数据和选区对象以查看结果。