环境:
Open3D
1.1 切片台体法介绍:
根据需求可以切成一层层的,然后先计算每层底面积,最后再计算台体面积(代码未仅实现部分功能)
2.1 python代码
conda activete deeplabv3plus(环境名称–安装好open3D的)
python demo.py
import open3d as o3d
import numpy as np
# 定义函数,用于绘制点云
def draw_point_cloud(result, batch=False):
if not batch:
for i in range(len(result)):
o3d.visualization.draw_geometries(
[result[i]],
window_name="result",
width=800, height=600,
left=50, top=50,
point_show_normal=False, mesh_show_back_face=False
)
else:
o3d.visualization.draw_geometries(
result,
window_name="result",
width=800, height=600,
left=50, top=50,
point_show_normal=False, mesh_show_back_face=False
)
# 主函数
def main():
# 读取点云数据
pc = o3d.io.read_point_cloud("downsampled_pcd.pcd")
# 点云等间距切片
d = 0.1 # 切片的厚度
dPlatform = 5 # 分割的台体厚度
min_bound = np.asarray(pc.get_min_bound())
max_bound = np.asarray(pc.get_max_bound())
# 获取各个切片
indices = []
minz = min_bound[2]
for i in range(len(pc.points)):
cur_point = np.asarray(pc.points[i])
curz = cur_point[2]
index = int(np.floor((curz - minz) / dPlatform))
slice_min = minz + index * dPlatform
if slice_min < curz < slice_min + d:
indices.append(i)
# 通过索引选择切片点云,并为切片着色
slices = pc.select_by_index(indices)
slices.paint_uniform_color([1, 0.706, 0])
# 将切片部分添加到结果列表中
result = [slices]
# 绘制点云
draw_point_cloud(result, batch=True)
if __name__ == "__main__":
main()