Open3D处理点云数据(一)点云文件读取、写入、显示

import open3d as o3d
import numpy as np


pcd = o3d.geometry.PointCloud()    # pcd类型的数据。
np_points = np.random.rand(100, 3)    # 随机生成点云
# print(np_points.shape)
# pcd = o3d.io.read_point_cloud("1.csv")

# 将点云转换成open3d中的数据形式并用pcd来保存,以方便用open3d处理
pcd.points = o3d.utility.Vector3dVector(np_points)

# 将点云从oepn3d形式转换为矩阵形式
np_points = np.asarray(pcd.points)

# 用open3d可视化生成的点云
o3d.visualization.draw_geometries([pcd])


import numpy as np
import open3d as o3d
np.set_printoptions(suppress=True) # 取消默认的科学计数法
Data1 = np.loadtxt('./0.csv',dtype=np.float,skiprows=1,
                   delimiter=',',usecols=(0,1,2),unpack=False)

有些Csv文件带表头:

skiprows是指跳过的行数,我这里设为1,因为我的数据第一行是表头。

delimiter=','表示数据的分隔符是逗号。

usecols=(0,1,2)表示使用第0、1、2列数据,这里结合表的具体内容,表数据的三维坐标是第0、1、2列数据;

unpack=False表示不把每一列当成一个向量输出,也就是一行数据就是一个向量,如果等于True就是一列数据是一个向量。数据是三维坐标,一行为一个向量。

Csv不带表头的:直接用Pandas读取。

import numpy as np
import pandas as pd
import open3d as o3d


pcd = o3d.geometry.PointCloud()    # pcd类型的数据。

with open("test(2).csv", encoding="utf-8") as f:
    data = pd.read_csv(f, header=None).values.tolist()
    print(data[:5])
    np_points = np.array(data)[:, 1:4]
    print(np_points.shape)
    pcd.points = o3d.utility.Vector3dVector(np_points)
    o3d.visualization.draw_geometries([pcd])
    # o3d.io.write_point_cloud('E:/project/3.ply', pcd)

拆分与拼接

import numpy as np
import pandas as pd
import open3d as o3d


pcd = o3d.geometry.PointCloud()    # pcd类型的数据。

with open("0.csv", encoding="utf-8") as f:
    data = pd.read_csv(f, header=None).values.tolist()
    # print(data[:5])

    np_points = np.array(data)
    # np_points = np.array(data)[:, 1:4]
    # print(np_points)
    print(np_points.shape)
    X = np_points[:, 1]
    print(type(X))
    Y = np_points[:, 2]
    Z = np_points[:, 3]
    # print(X)
    # print(Y)
    # print(Z)
    m3d = np.array([X, Y, Z]).T    # 特别注意此行。
    pcd.points = o3d.utility.Vector3dVector(m3d)
    o3d.visualization.draw_geometries([pcd])

这个主要针对我们从其他地方读取到X,Y,Z分量的合并,以及如何将X,Y,Z拆解。


在Open3D打开显示时:可以通过【Ctrl + +】来放大点。【Ctrl +--】来缩小点。鼠标滚轮来将整体放大缩小。

你可能感兴趣的:(3D点云,数据处理工具,python,数据分析,3D)