凸包表面积、体积、包围框的坐标、对角线
一、算法原理
1.计算表面积.
area = hull.get_surface_area() # 计算表面积
2.计算体积
volume = hull.get_volume() # 计算体积
3.返回包围框最大值坐标
pcd.get_max_bound() # 返回包围框最大值坐标
4.返回包围框最小值坐标
pcd.get_min_bound() # 返回包围框最小值坐标
5.包围盒的对角线长度
diameter = np.linalg.norm( # 点云数据中包围盒的对角线长度
pcd.get_max_bound() # 返回包围框最大值坐标
- pcd.get_min_bound()) # 返回包围框最小值坐标
二、代码
import numpy as np
import open3d as o3d
if __name__ == '__main__':
pcd = o3d.io.read_point_cloud("res/bunny.pcd")
pcd.paint_uniform_color([0.5, 0.5, 0.5]) # 给点云渲染颜色
print(pcd) # 输出点云点的个数
hull, idx = pcd.compute_convex_hull()
hull.paint_uniform_color([1, 0, 0]) # 给凸包渲染颜色
area = hull.get_surface_area() # 计算表面积
volume = hull.get_volume() # 计算体积
print("表面积为:", area)
print("体积为:", volume)
diameter = np.linalg.norm( # 点云数据中包围盒的对角线长度
pcd.get_max_bound() # 返回包围框最大值坐标
- pcd.get_min_bound()) # 返回包围框最小值坐标
print('包围盒的对角线长度:', diameter)
print('包围框最大值坐标:', pcd.get_max_bound())
print('包围框最小值坐标:', pcd.get_min_bound())
o3d.visualization.draw_geometries([pcd, hull])
三、结果展示
1.函数信息展示
2.点云数据
3.凸包后数据
四、相关链接
凸包信息:open3d 凸包-CSDN博客
测试数据链接:https://pan.baidu.com/s/1IrR6r7m1OatsvmLOJ5phdA
提取码:lkix