计算点云的轴对齐包围盒
aabb=pcd.get_axis_aligned_bounding_box()
计算点云的有方向的包围盒
obb= pcd.get_oriented_bounding_box()
import open3d as o3d
if __name__ == "__main__":
sample_ply_data = o3d.data.PLYPointCloud()
pcd = o3d.io.read_point_cloud(sample_ply_data.path)
# Flip it, otherwise the pointcloud will be upside down.
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
print(pcd)
axis_aligned_bounding_box = pcd.get_axis_aligned_bounding_box()
# 包围盒中心坐标
[center_x, center_y, center_z] = axis_aligned_bounding_box.get_center()
# 包围盒8个顶点坐标
vertices = axis_aligned_bounding_box.get_box_points()
# 获取边界框在x,y,z维度的范围或者长度
side = axis_aligned_bounding_box.get_extent()
axis_aligned_bounding_box.color = (1, 0, 0)
oriented_bounding_box = pcd.get_oriented_bounding_box()
# 包围盒中心坐标
[center_x, center_y, center_z] = axis_aligned_bounding_box.get_center()
# 包围盒8个顶点坐标
vertices = axis_aligned_bounding_box.get_box_points()
oriented_bounding_box.color = (0, 1, 0)
print(
"Displaying axis_aligned_bounding_box in red and oriented bounding box in green ..."
)
o3d.visualization.draw(
[pcd, axis_aligned_bounding_box, oriented_bounding_box])
计算质心,并把点云平移到原点
import open3d as o3d
import numpy as np
if __name__ == '__main__':
pcd = o3d.io.read_point_cloud("data/bunny.ply")
center=pcd.get_center()
print(center)
for i,point in enumerate(pcd.points) :
pcd.points[i]=point-center
#也可以使用Numpy计算质心
points = np.array(pcd.points)
#注意:axis, 默认是对所有元素相加求平均值;axis = 0,对各列求均值;axis = 1,对各行求均值
center = np.mean(points, axis=0)