激光雷达采集的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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_54792870/article/details/112970845