python读取点云文件

最近要用到激光点云的处理,先用python做点云的可视化吧。

# -*-coding:utf-8-*-

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D


def readXYZfile(filename, Separator):
    data = [[], [], []]

    f = open(filename, 'r')

    line = f.readline()

    num = 0

    while line:  # 按行读入点云

        c, d, e = line.split(Separator)

        data[0].append(c)  # X坐标

        data[1].append(d)  # Y坐标

        data[2].append(e)  # Z坐标

        num = num + 1

        line = f.readline()

    f.close()

    # string型转float型

    x = [float(data[0]) for data[0] in data[0]]

    z = [float(data[1]) for data[1] in data[1]]

    y = [float(data[2]) for data[2] in data[2]]

    print("读入点的个数为:{}个。".format(num))

    point = [x, y, z]

    return point


# 三维离散点图显示点云

def displayPoint(data, title):
    # 解决中文显示问题

    plt.rcParams['font.sans-serif'] = ['SimHei']

    plt.rcParams['axes.unicode_minus'] = False

    # 点数量太多不予显示

    while len(data[0]) > 20000:
        print("点太多了!")

        exit()

    # 散点图参数设置

    fig = plt.figure()

    ax = Axes3D(fig)

    ax.set_title(title)

    ax.scatter3D(data[0], data[1], data[2], c='r', marker='.')

    ax.set_xlabel('x')

    ax.set_ylabel('y')

    ax.set_zlabel('z')

    plt.show()


if __name__ == "__main__":
    data = readXYZfile("b.txt", ' ')

    displayPoint(data, "模型")

经过测试代码通顺

python读取点云文件