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 +--】来缩小点。鼠标滚轮来将整体放大缩小。