效果如下:
import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt
import random,colorsys
pcd = o3d.io.read_point_cloud("/home/zhengxin/PV_System/data/buildings.pcd")
xyz = np.asarray(pcd.points)
with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:
labels = np.array(pcd.cluster_dbscan(eps=1.5, min_points=100, print_progress=True))
max_label = labels.max()
print(f"point cloud has {max_label + 1} clusters")
vis = o3d.visualization.Visualizer()
vis.create_window()
for i,label in enumerate(np.unique(labels)):
if label==-1:
continue
else:
idx=np.where(labels==label,True,False)
xyz_building = o3d.geometry.PointCloud()
xyz_building.points=o3d.utility.Vector3dVector(xyz[idx])
vis.add_geometry(xyz_building)
bbox = xyz_building.get_axis_aligned_bounding_box()
bbox.color=(0,0,0)
vis.add_geometry(bbox)
vis.poll_events()
vis.update_renderer()
vis.run()
# vis.destroy_window()