python plot_surface 画表面网格图

对于三维点云数据(如pcd),如何画其表面的网格图,比如1 * 1 m的表面网格图?

话不多说,直接上python脚本,已验证。

# !/usr/bin/env python3
# -*- coding: utf-8 -*-

import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def grid_plot(file):
    target = o3d.io.read_point_cloud(file)
    points = np.asarray(target.points)
    idex = np.lexsort([points[:, 2], points[:, 1], points[:, 0]])
    # 按照X Y Z进行从小到大排序
    points = points[idex, :]
    # 计算x y z 三个维度的最值
    x_min, y_min, z_min = np.amin(points, axis=0)
    x_max, y_max, z_max = np.amax(points, axis=0)
    print(x_min, x_max, y_min, y_max, z_min, z_max)
    print(points.shape)
    step = 0.1
    # 计算行列
    x_num =(int) (round((x_max - x_min) / step))+1
    y_num =(int) (round((y_max - y_min) / step))+1
    print('x-y-num:', x_num, y_num)

    # 按照行列矩阵排列
    X = points[:, 0].reshape(x_num, y_num)
    Y = points[:, 1].reshape(x_num, y_num)
    Z = points[:, 2].reshape(x_num, y_num)
    print('X-Y-shape:', X.shape, Y.shape)

    fig = plt.figure()
    ax = Axes3D(fig)
    # 行,列步长 对应网格大小  rainbow/coolwarm
    ax.plot_surface(X, Y, Z, rstride=10, cstride=10, cmap=plt.get_cmap('rainbow'))
    # Z轴范围
    ax.set_zlim(0, 8)
    plt.title("3D")
    # 去除坐标轴和刻度
    plt.axis('off')
    plt.show()


if __name__ == "__main__":
    file = '/*/test.pcd'
    grid_plot(file)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值