io获取 pcl_PCL入门系列三——PCL进行数据读写

本节课我们将了解到以下内容:基本的PCL中的数据类型;

使用PCL进行简单编程:写文件与读文件。

一、PCL库基本数据类型

上一节课,我们使用PCL库在本地写入了一个名为test_pcd.pcd的文件。我们划分一下程序的任务步骤:构造pcd文件格式;

写入文件;

打印输出。

步骤二和步骤三的内容属于基本的C++知识。而步骤一中的pcd文件格式是我们所不熟悉的,所以要先看一看pcd原始文件。

在命令行中输入:

more test_pcd.pcd

可以看到pcd文件的内部结构如下图所示。

三维点云数据最简单的形式是x y z的三维点空间坐标。稍微复杂一些可以加上intensity、RGB等属性。但是这种表达方式有什么缺点呢?

一方面直接以文本形式存储点云的三个坐标在内存上比较浪费空间,另一方面如果用户要取得点云的一些基本信息如点云个数,用户还要自己去查询。如果有一个文件头能够简洁的描述点云数据信息,那么无论是在存储效率还是数据信息提取等方面都会有一定帮助。

pcd格式可以视作“文件格式头+三维点信息”。

请看一个具体pcd文件的例子:

# .PCD v0.7 - Point Cloud Data file format

VERSION 0.7

FIELDS x y z

SIZE 4 4 4

TYPE F F F

COUNT 1 1 1

WIDTH 5

HEIGHT 1

VIEWPOINT 0 0 0 1 0 0 0

POINTS 5

DATA ascii

0.35222197 -0.15188313 -0.10639524

-0.3974061 -0.47310591 0.29260206

………………………………

这个pcd文件里有着不同的字段。常用的有以下几种。VERSION - PCD文件的版本号(通常为0.7);

FIELDS - 每个点所包含的维度或字段(例如x y z);

SIZE - 每个数据维度所占据的字节(比如float为4字节)

TYPE -每个数据维度的数据类型(I= signed,U= unsigned,F=float)

COUNT - 每个数据维度上包含的元素个数。(比如,x, y, or z的count为1,但是hisogram的count包含N)

WIDTH - 点云的宽度

HEIGHT - 点云的高度

VIEWPOINT - 点云的视角 translation (tx ty tz) +quaternion (qw qx qy qz)

POINTS -点云的数量

DATA -具体的数据存储格式(ascii or binary)

在之前的内容中我们忽略了一个小小的但是相对重要的知识点:待填充的数据怎么表示?请注意这里不能简单的使用字符串xyz的形式进行填充,如果仍旧使用字符串的格式进行填充,那么pcd文件格式在存储上的优势根本无法体现。一种简单的方法是为点云数据定义一个结构体,详细的情况后文再叙,这里先罗列一下最常用的数据类型(当然自定义数据类型也可)。

Point Types

PointXYZ- float x, y, z

PointXYZI- float x, y, z, intensity

PointXYZRGB- float x, y, z, rgb

PointXYZRGBA- float x, y, z, uint32t rgba

Normal- float normal[3], curvature

PointNormal- float x, y, z, normal[3], curvature

Histogram- float histogram[N]

………………

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值