pclpy pcd、pcl、vtk等文件读取点云、保存点云、可视化点云
一、读取点云数据
1.1 读取点云(只读取坐标,不读取颜色)
方法一
cloud = pcl.PointCloud.PointXYZ()
pcl.io.loadPCDFile('res/bunny.pcd', cloud) # 读取点云数据在cloud中
方法二
cloud = pcl.PointCloud.PointXYZ()
reader = pcl.io.PCDReader()
reader.read("res/bunny.pcd", cloud)
1.2 读取点云(坐标,颜色)
方法一
cloud = pcl.PointCloud.PointXYZRGB()
pcl.io.loadPCDFile('res/bunny.pcd', cloud)
方法二
cloud = pcl.PointCloud.PointXYZRGB()
reader = pcl.io.PCDReader()
reader.read("res/bunny.pcd", cloud)
补充读取ply、vtk格式点云
ply格式读取
mesh = pcl.PolygonMesh()
pcl.io.loadPLYFile("res/bunny.ply", mesh)
vtk格式读取
pcl.io.loadPLYFile("messy_mesh_binary.vtk", mesh)
二、保存点云数据
1.pcd等文件保存
pcl.io.savePCDFileASCII("res/bunnyCc.pcd", cloud)
2.ply文件保存
pcl.io.savePLYFile('res/monkeyC.ply', mesh)
3.vtk文件保存
pcl.io.savePLYFile('mesh.vtk', mesh)
三、可视化点云
viewer = pcl.visualization.PCLVisualizer("3D viewer") # 建立一个可视化对象,窗口名 3D viewer
viewer.setBackgroundColor(0, 0, 0) # 设置窗口背景为黑色
rgb = pcl.visualization.PointCloudColorHandlerRGBField.PointXYZRGB(cloud) # 获得点云的颜色
viewer.addPointCloud(cloud, rgb) # 将颜色和点云数据添加到可刷对象中
while not viewer.wasStopped(): # 展示可视化对象
viewer.spinOnce(10)
四、全代码
from pclpy import pcl
import numpy as np
if __name__ == '__main__':
# ----------------------读取点云------------------------
cloud = pcl.PointCloud.PointXYZRGB()
pcl.io.loadPCDFile('res/bunny.pcd', cloud)
print('读取点云的点数为:', cloud.size())
print('点云坐标为:', np.asarray(cloud.xyz)[:])
# -----------------------可视化------------------------
viewer = pcl.visualization.PCLVisualizer("3D viewer") # 建立一个可视化对象,窗口名 3D viewer
viewer.setBackgroundColor(0, 0, 0) # 设置窗口背景为黑色
rgb = pcl.visualization.PointCloudColorHandlerRGBField.PointXYZRGB(cloud) # 获得点云的颜色(可以没有)
viewer.addPointCloud(cloud, rgb) # 将颜色和点云数据添加到可刷对象中
while not viewer.wasStopped(): # 展示可视化对象
viewer.spinOnce(10)
五、结果
六、相关数据
测试数据下载链接:https://pan.baidu.com/s/1uT6UbzU5h7wPurnQYUB7TQ
提取码:lsyg
七、问题与解决方法
这个问题是由于点云文件导致的切换一个点云文件尝试即可。。。