激光雷达采集的pts格式数据怎么转成pcd格式
前言
由于工作项目需求,从客户那里下载了数据量很大的pts格式数据,需要转出.pcd可用文件,以下是简介和解决方案;一、.pts里面是什么数据?
激光雷达三维点云保存格式很多;其中.pts是保存点云最快捷的方式,直接按照X Y Z顺序存储点云,可以保存成整型或者浮点型;可以用ASCII码保存也可以用二进制保存,每个参数直接用空格隔开;如下图所示:
二、.pcd是什么数据?
PCD格式是一种全新的点云格式,具体讲解请参考以下地址;
转载地址:http://www.pclcn.org/study/shownews.php?lang=cn&id=54
三、转换步骤
1.PCD数据形式
.pcd文件不仅仅可以通过PCL工具打开,以下是通过VSCODE或者gedit等编辑器打开;
通过对比pts可以发现.pcd文件就是.pts数据取一行的前4个参数+头文件组成;
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z intensity
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 35067435
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 35067435
DATA ascii
0 0 0 4
-1.32 -2.761 0.084 23
2.916 -2.93 0.147 26
2.317 -0.563 0.098 21
-0.081 -7.745 0.073 24
3.239 -4.546 0.117 12
-1.094 -3.617 0.109 6
......
2.转换数据
知道以上流程后,我们利用Python进行循环转换导出,毕竟是35067435个点云;
脚本内容如下:
### pts_pcd
f = open("DATA.pts")
o = open('DATA_out.txt', 'w')
line = f.readline()
line = f.readline()
while line:
w = line.split(" ", 6)
print(w[0] + " " + w[1] + " " + w[2] + " " + w[3])
o.write(w[0] + " " + w[1] + " " + w[2] + " " + w[3] + "\r\n")
line = f.readline()
f.close()
o.close()
等待数据刷完可以看到同层目录下生成了一个DATA_out.txt文件;
3.加载头文件
头文件内容如下,注意WIDTH以及POINTS参数必须跟pts参数对应;
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z intensity
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 35067435
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 35067435
DATA ascii
将头文件直接复制到DATA_out.txt或者使用一下指令直接从head.txt复制到DATA.txt;
sed -ne '1 r head.txt' -e '1N;P' -i DATA_out.txt
四.查看PCD
将DATA_out.txt的后缀改成.pcd;用pcl_viewer 打开.pcd文件$ pcl_viewer DATA_out.pcd