0.引言
\qquad
ROS的PCL库支持python读取点云,ROS1关联的是python2(2.7),ROS2关联的是python3(>=3.5),但这对于windows的用户和没装ROS的ubuntu用户似乎不够友好。下面就介绍两种不需要ros的方法。
\qquad
点云的fileds有好几种,XYZ,XYZI,XYZRGB,XYZRGBA,本文以XYZI为例讲解,如果是RGB类型的参考以下链接:
https://blog.csdn.net/qq_35565669/article/details/106687208
1.python2读取点云
在python2的环境下:
pip2 install pypcd
注意,python3不能安装这个包
参考代码:
import pypcd
import numpy as np
import os
from tqdm import tqdm
pcd_dir = '/data3/data/SemiAuto_Calib/PC2_CV3/PC2_CV/pcd'
out_pcd_dir = "data/pcd"
pcd_files = [file for file in os.listdir(pcd_dir) if os.path.splitext(file)[1]=='.pcd']
pcd_files.sort()
os.makedirs(out_pcd_dir)
for file in tqdm(pcd_files,desc="pcd"):
cloud = pypcd.PointCloud.from_path(os.path.join(pcd_dir,file))
pcd_array = cloud.pc_data.view(np.float32).reshape(cloud.pc_data.shape+(-1,))
np.save(os.path.join(out_pcd_dir,os.path.splitext(file)[0]+".npy"),pcd_array)
Windows用户可删除第一行注释,并切换到python2环境运行此脚本。
2.python3读取点云
需要python3.6的环境,安装pclpy
pip3 install pclpy
python3.6环境用户直接跳过以下内容
原github网址:
https://github.com/davidcaron/pclpy
注:原github网址提示兼容的版本: 若不是python3.6则不能直接通过pip安装(无pypi的二进制文件),需要通过conda安装: conda install -c conda-forge -c davidcaron pclpy 不建议使用,安装了10分钟仍然在等待,而且是强制安装。
参考代码:
import pclpy
from pclpy import pcl
import numpy as np
obj = pclpy.pcl.PointCloud.PointXYZI()
pcl.io.loadPCDFile('PC2_CV\pcd\PointXYZI_001.pcd',obj)
np_xyz = obj.xyz
insty = obj.intensity[:,None]
print(np_xyz.shape,insty.shape)
输出:
(28800, 3) (28800, 1)
一个是XYZ坐标,一个是intensity强度。 另外,这个库还可以像pcl一样展示点云
参考:https://www.codeleading.com/article/19791179164/
import pclpy
from pclpy import pcl
obj=pclpy.pcl.PointCloud.PointXYZI()
pcl.io.loadPCDFile('PC2_CV\pcd\PointXYZI_001.pcd',obj)
viewer=pcl.visualization.PCLVisualizer('pcd-viewer')
viewer.addPointCloud(obj)
while(not viewer.wasStopped()):
viewer.spinOnce(100)
不怎么好看,但是可以随便旋转。
|