DrifterFun

One need not hope in order to undertake, nor succeed in order to persevere.

压死程序员的大山

2018-05-01


我记得我曾经专门写过一篇博客讨论为什么程序员的大好时光都被什么消耗了。俗话说得好写程序1小时Debug100年,程序员本来应该像大多数人一样拥有自由充沛的时间,然而就是因为三座大山导致程序员的人生被浪费在了长时间的debug之上。可以说是相当绝望了。

今天一直在做一件很简单的点云生成的工作,我很确定自己完成了点云颜色的添加,也确定自己添加的颜色是符合规范的,然而在Windows下就是显示不出来。刚刚才发现原来是PCL库在Windows下支持的pcd_viewer_release和Linux下的pcl_viewer完全是两个不一样的东西。切换了系统之后下图这种狗屎黄的东西终于变成了彩色。

图片名称 图片名称

3D点云数据的文件类型——PCD。

想了想还是总结下PCD的文件格式吧

PCD版本

在点云库(PCL)1.0版本发布之前,PCD文件格式有不同的修订号。这些修订号用PCD_Vx来编号(例如,PCD_V5、PCD_V6、PCD_V7等等),代表PCD文件的0.x版本号。然而PCL中PCD文件格式的正式发布是0.7版本(PCD_V7)。

文件头格式

每一个PCD文件包含一个文件头,它确定和声明文件中存储的点云数据的某种特性。PCD文件头必须用ASCII码来编码。PCD文件中指定的每一个文件头字段以及ascii点数据都用一个新行(\n)分开了,从0.7版本开始,PCD文件头包含下面的字段:

例子

下面贴出了PCD文件的一个片段。把它留给看官以解析这些数据,看看它的组成,玩的愉快!

# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F I
COUNT 1 1 1 1
WIDTH 285633
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 285633
DATA ascii
-0.035189189 -0.027352601 0.056000002 8945018
-0.035081081 -0.027352601 0.056000002 9010811
-0.034972973 -0.027352601 0.056000002 9010811
-0.034864865 -0.027352601 0.056000002 9010811

PS:其中rgb这一项中是用一个整型数代表的他是这样算出来的:

int(int(r) << 16) | (int(g) << 8) | int(b)                  #移位运算