PCD文件格式详解及在PCL下读取PCD文件
一、PCD简介
1.1 PCD版本
在点云库PCL 1.0发布之前,PCD文件格式就已经发展更新了许多版本。这些新旧不同的版本用PCD_Vx来编号(例如PCD_V5、PCD_V6和PCD_V7等),分别代表PCD文件的0.5版、0.6版和0.7版。在PCL中,用到的PCD文件格式的正式发布是0.7版,即PCD_V7。
1.2 头文件格式
PCD文由 “头文件 + 点云数据” 构成,头文件声明了该点云数据集的基本特性。下面以PCD_V7版本的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 35947
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 35947
DATA ascii
-1.10698 3.272394 -0.447241
-1.80195 3.367094 -0.704211
-4.12496 5.602794 2.824819
1.2.1 VERSION
指定PCD文件的版本,由0.7可知该点云数据集是0.7版本的。
VERSION 0.7 //PCD版本号为0.7版
1.2.2 FIELDS
指定本点云数据集中任意一个点可以有的维度信息和其他附加信息。如:FIELDS x y z 指每个点都有xyz三个维度信息,FIELDS x y z rgb 指每个点除了xyz维度信息外还有颜色信息等。
FIELDS x y z //该数据集中包含每一个点的xyz纬度信息
1.2.3 SIZE
储存每个维度信息占用的字节数(byte)。1指用char型数据存储维度信息,2指用short型数据存储维度信息,4指用int或float型数据存储维度信息,8指用double型数据存储维度信息。
SIZE 4 4 4 //x y z每个维度均占用4个字节
1.2.4 TYPE
用字符指定每一个维度的数据类型。I表示有符号类型:int8(char),int16(short),int32(int);U表示无符号类型:uint8(unsigned char),uint 16(unsigned short),uint32(unsigned int);F表示浮点型float和double。
TYPE F F F //x y z每个维度的均为4字节的浮点型,即为float
1.2.5 COUNT
每个维度包含的元素个数。
COUNT 1 1 1 //x y z每个维度均包含1个元素
1.2.6 WIDTH
点云数据集可分为有序数据集和无序数据集两种。有序数据集类似矩阵,有行列之分,无序数据集则无行列之分。根据数据集是否有序,WIDTH由不同的含义。
对有序数据集而言:表示数据集的宽度(每行点的数目);
对于无序数据集而言:表示数据集中点的总数(和下面的POINTS一样)。
1.2.7 HEIGHT
对有序数据集而言:表示数据集的高度(行数);
对于无序数据集而言:被设置为1,用于声明一个数据集是否有序。
//该数据集为无序数据集,共有35947个点
WIDTH 35947
HEIGHT 1
1.2.8 VIEWPOINTS
数据集中点云的获取视点。视点信息被指定为“平移(txtytz) + 四元数(qwqxqyqz)”,默认值是:VIEWPOINT 0 0 0 1 0 0 0
VIEWPOINT 0 0 0 1 0 0 0 //数据集的获取视点
1.2.9 POINTS
点云中点的总数,从0.7版本就开始显得有点多余,可能会在后续版本中舍去这个参数。
POINTS 35947 //该数据集中共有35947个点
1.2.10 DATA
指定存储点云数据的数据存储格式:ASCLL码或二进制数据。
DATA ascii //该数据集用ASCLL码存储数据
1.3 点云数据
以ASCLL码存储的点云数据,每一个点占据一行,“nan”表示不存在或非法的数据。
-1.10698 3.272394 -0.447241
-1.80195 3.367094 -0.704211
-4.12496 5.602794 2.824819
......
二、PCD文件在PCL下的读取
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
int main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);//创建点云指针
if(pcl::io::loadPCDFile<pcl::PointXYZ>("rabbit.pcd", *cloud )== -1)//读入PCD格式文件,如果文件不存在,返回-1
{
PCL_ERROR("Couldn't read file rabbit.pcd\n");
return -1;
}
std::cout << "Loaded"
<< cloud->points.size()
<< "data points from rabbit.pcd with the following fields: "
<< std::endl;
//for (size_t i = 0; i < cloud->points.size(); i++) 显示所有的点
//显示前5个点
for (size_t i = 0; i < 5; i++)
{
std::cout << " " << cloud->points[i].x << " " << cloud->points[i].y << " " << cloud->points[i].z << std::endl;
}
system("pause");
return 0;
}

PCD文件格式详解及在PCL下读取PCD文件的更多相关文章
- BMP文件格式详解
BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广 ...
- PE文件格式详解,第一讲,DOS头文件格式
PE文件格式详解,第一讲,DOS头文件格式 今天讲解PE文件格式的DOS头文件格式 首先我们要理解,什么是文件格式,我们常说的EXE可执行程序,就是一个文件格式,那么我们要了解它里面到底存了什么内容 ...
- PE文件格式详解,第二讲,NT头文件格式,以及文件头格式
PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...
- PE文件格式详解,第三讲,可选头文件格式,以及节表
PE文件格式详解,第三讲,可选头文件格式,以及节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶可选头结构以及作 ...
- DOS文件转换成UNIX文件格式详解
转:DOS文件转换成UNIX文件格式详解 由windows平台迁移到unix系统下容易引发的问题:Linux执行脚本却提示No such file or directory dos格式文件传输到uni ...
- OpenGL学习--05--纹理立方体--BMP文件格式详解(转载)
http://blog.csdn.net/o_sun_o/article/details/8351037 BMP文件格式详解 BMP文件格式详解(BMP file format) BMP文件格式,又称 ...
- Android逆向之旅---SO(ELF)文件格式详解(转)
第一.前言 从今天开始我们正式开始Android的逆向之旅,关于逆向的相关知识,想必大家都不陌生了,逆向领域是一个充满挑战和神秘的领域.作为一名Android开发者,每个人都想去探索这个领域,因为一旦 ...
- 音视频入门-11-PNG文件格式详解
* 音视频入门文章目录 * PNG 文件格式解析 PNG 图像格式文件由一个 8 字节的 PNG 文件署名域和 3 个以上的后续数据块(IHDR.IDAT.IEND)组成. PNG 文件包括 8 字节 ...
- Android逆向之旅---SO(ELF)文件格式详解
第一.前言 从今天开始我们正式开始Android的逆向之旅,关于逆向的相关知识,想必大家都不陌生了,逆向领域是一个充满挑战和神秘的领域.作为一名Android开发者,每个人都想去探索这个领域,因为一旦 ...
随机推荐
- 01-Linux操作系统+指令
一.Linux操作系统 操作系统定义:操作系统直接运行在计算机上的系统软件, 它是与硬件打交道和控制软件运行的计算机程序. 虚拟机:就是模拟一个真实的计算机,好比一个虚拟的电 ...
- Springboot 打jar包分离lib,配置文件正确方式
文章来源:https://my.oschina.net/xiaozhutefannao/blog/1932764 POM.xml <?xml version="1.0" en ...
- STM32L1X系列GPIO运用
STM32L15x 系列中基本步骤是和STM32F10x相同的 一 配置GPIO 初始化GPIO时我们需要催一下内容进行配置(以下步骤没有必然顺序) 1 创建GPIO结构 GPIO_InitTypeD ...
- h5调起微信支付
后台需要进行生成签名获取参数. 前台代码: function onBridgeReady(appId,timeStamp,nonceStr,package1,paySign,signType,open ...
- 给没有连接因特网的centos使用yum安装其他软件。
在centos上,使用yum安装软件很方便,比如安装gcc,java等, 但是在没有网络的情况下呢? 我之前就碰到过这么一个问题,在一个没有外网的环境内,我需要安装GCC等工具, 然后有人推荐我先去其 ...
- javascript中所有函数参数都是按值传递
在看<JavaScript高级程序设计>(第三版)的时候,传递参数这一节,里面提到 ECMAScript中所有函数的参数都是按值传递的 它自己的解释是, 把函数外部的值复制给函数内部的参数 ...
- 将一个整数M分成N个整数 要求每个都在区间【minV, maxV】之间
将一个整数M分成N个整数 要求每个都在区间[minV, maxV]之间,怎么分比较快捷???? 说明: N是>=1且<=9的数,分割的数据只要符合[minV, maxV]区间即可,可以是等 ...
- 20175305张天钰 《java程序设计》第四周课下测试总结
第四周课下测试总结 错题 某方法在父类的访问权限是public,则子类重写时级别可以是protected. A .true B .false 正确答案:B 解析:书P122:子类不允许降低方法的访问权 ...
- 封装PDO函数
funPDO.php <?php /** * @title: 封装PDO函数 * * @Features: * 1. 封装 SELECT ,INSERT,DELETE,UPDATE 操作 @do ...
- Python PE8 编程规范
1.使用四个空格而不是tab进行缩进 2.默认使用utf-8编码 3.尽量不要使用魔术方法 4.类中使用self作为默认参数 5.命名时,尽量使用驼峰式或单词+下划线,要保证见名知意 6.操作符和逗号 ...