点云txt格式转pcd(Open3D支持格式)

Open3D格式支持

一般获得点云的基础格式是las和txt格式,但是在抽取数据后使用python包open3d进行点云的更多处理时,一般支持的是pcd格式,我们先看一下pcd格式的文本内容:

点云txt格式转pcd(Open3D支持格式)_第1张图片

PCD版本

可以看到,pcd格式的文件虽然和TXT格式的一样都是是记事本文件,但是它的抬头有pcd的版本和格式的一些声明。这样一来我们似乎就只需要将抬头和txt的数据接到一起放到另一个记事本里面就可以制作pcd文件了。

# .PCD v0.7 - Point Cloud Data file format :格式声明
VERSION 0.7:版本号,一般只用0.7
FIELDS x y z
XYZ三维坐标,添加rgb可以指示颜色
SIZE 4 4 4每个维度的数据占用字节大小
TYPE F F FF表示每个维度都是浮点型数据
COUNT 1 1 1:一个维度只有一个数据
WIDTH 7270:数据宽度(7270)
HEIGHT 1:数据高度(1)
VIEWPOINT 0 0 0 1 0 0 0:数据点云获取视点
POINTS 7270:点数(7270 = 7270 *1)
DATA ascii:数据存储类型

但事实上在输出的绝大多数的txt点云数据陡不是三列的,很多都是包含x,y,z,r,g,b,scale七列数据。

点云txt格式转pcd(Open3D支持格式)_第2张图片

七列数据中的后四列在open3d中无法打开。怎么把任意列数的txt文件转为三列的pcd格式呢?

 

转换逻辑

1.抽取地址并读取txt文件,查询文件的列数。

open(input("Extract_path_txt:"), 'r')

2.readlines按行读取并将前三列的坐标添加到新的列表。

#将单行文本转化为数值矩阵
da_float = [math.fabs(float(i)) for i in lines.split(' ')]
x.append(da_float[0])
y.append(da_float[1])
z.append(da_float[2])

4.创建文本文件,保存地址并添加(.pcd)后缀

savefilename = input("Filename_pcd:") + ".pcd"
savefilename = input("Save_path_pcd:") + savefilename
file_pcd = open(savefilename, 'w')
file_pcd.close()#注意,此处必须要关闭

3.打开写入pcd版本声明和前三列的坐标数据。

        pcd抬头:注意WIDTH,POINTS,均指示txt文件的点云的行数,即点云个数。

        写完抬头后按行继续写前三列的数据

#每行俩空格一次换行
file_w.writelines(str(x[i]) + " " + str(y[i]) + " " + str(z[i]) + "\n")

你可能感兴趣的:(点云处理基础,数据结构)