SLAM学习交流可加群:248085206

三维点云数据简介

1 什么是点云数据

点云数据是指在一个三维坐标系中的一组向量的集合。这些向量通常以X,Y,Z三维坐标的形式表示,一般主要代表一个物体的外表面几何形状,除此之外点云数据还可以附带RGB信息,即每个坐标点的颜色信息,或者是其他的信息。

2 点云数据格式——PCD文件

在这里推荐大家都将都将点云数据保存为 *.pcd文件,因为有pcl这个开源库专门处理pcd格式的文件,它实现了点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。
        下面是通过pycharm编辑器解析的.pcd文件:

2.1 下面介绍该文件每行具体所代表的含义:

(1).VERSION 0.7
    指定pcd文件的版本。

(2).FIELDS
    指定每个点可以具有的维度,以及每个维度所代表的含义。
    例如:FIELDS x y z r g b表示该点的位置信息(x,y,z),颜色信息(r,g,b)。

(3).SIZE
    以字节为单位指定每个数据所占用的内存。

(4).TYPE
    指定每个数据的数据类型。其中无效的点的通常存储为NAN类型。
    I:可表示int8,int16,int32。
    U:可表示uint8,unit16,uint32。
    F:表示float(上图所用的为浮点类型)。

(5).COUNT
    指定每个维度有多少元素。
    例如xyz数据通常只有一个元素。

(6).WIDTH
    指定数据点的宽度,它包含两个含义:
    1.可指定点云总个数(与POINTS相同),用于无组织的数据。
    2.可指定有组织点云数据的宽度(连续点的总数)。

(7).HEIGTH
    指定数据点的高度,它包含两个含义:
    1.可指定有组织的点云数据的高度(总行数)。
    2.对未组织的数据,它被设置为1。

(8).POINTS
    指定点云总个数。

(9).VIEWPOINT
    采集数据时的视点(由平移tx,ty,tz和四元数qw,qx,qy,qz组成)。

(10).DATA
    点云数据存储的数据类型(支持ascii和binary)。如果以ASCII形式,每一点占据一个新行。

3 总结

所有的pcd文件前十行必须是以上的格式,并且不能改变顺序。

4 PCD文件中写入点云

write_pcd.cpp :#include <iostream>              //标准C++库中的输入输出的头文件
#include <pcl/io/pcd_io.h>           //PCD读写类相关的头文件
#include <pcl/point_types.h>      //PCL中支持的点类型的头文件intmain (int argc, char** argv)
{//实例化的模板类PointCloud  每一个点的类型都设置为pcl::PointXYZ
/*************************************************点PointXYZ类型对应的数据结构Structure PointXYZ{float x;float y;float z;};
**************************************************/pcl::PointCloud<pcl::PointXYZ> cloud; //创建一个存储点云的容器,容器中每个点的类型是pcl::PointXYZ。// 并设置点云容器适当的参数(width height is_dense)cloud.width    = 5;cloud.height   = 1;cloud.is_dense = false;  //不是稠密型的cloud.points.resize (cloud.width * cloud.height);  //点云总数大小//用随机数的值填充PointCloud点云对象 for (size_t i = 0; i < cloud.points.size (); ++i){cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);}//把PointCloud对象数据存储在 test_pcd.pcd文件中,并以ascii码的形式。pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud); //打印输出存储的点云数据std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;for (size_t i = 0; i < cloud.points.size (); ++i)std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;return (0);
}

5 从PCD文件读取点云数据

write.cpp:#include <iostream>              //标准C++库中的输入输出的头文件
#include <pcl/io/pcd_io.h>       //PCD读写类相关的头文件
#include <pcl/point_types.h>     //PCL中支持的点类型的头文件int
main (int argc, char** argv)
{ //创建一个PointCloud<pcl::PointXYZ>    boost共享指针并进行实例化pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);//打开点云文件if (pcl::io::loadPCDFile<pcl::PointXYZ> ("test_pcd.pcd", *cloud) == -1) {PCL_ERROR ("Couldn't read file test_pcd.pcd \n");return (-1);}
//默认就是而二进制块读取转换为模块化的PointCLoud格式里pcl::PointXYZ作为点类型  然后打印出来std::cout << "Loaded "<< cloud->width * cloud->height<< " data points from test_pcd.pcd with the following fields: "<< std::endl;for (size_t i = 0; i < cloud->points.size (); ++i)std::cout << "    " << cloud->points[i].x<< " "    << cloud->points[i].y<< " "    << cloud->points[i].z << std::endl;return (0);
}

点云数据pcd文件简介相关推荐

  1. PCL Lesson5: 直通滤波+空间平面拟合+提供原始点云数据集PCD文件

    书接上文.本节做下面一个工作:通过直通滤波过滤一小片平面区域的点云(标定版),通过最小二乘法拟合,并把参数化的平面绘制在原图中. 待修正:拟合平面时离散点的处理.和拟合效果的判别 效果: 原始点云的文 ...

  2. pacbio 原始下机数据h5 文件简介

    pacbio 采用hdf5文件格式保存原始的下机数据,对于RS 测序系统而言,会产生一个 bas.h5 的文件; 以bas.h5 文件为例,看一下有下机数据中保存了那些信息 h5dump 工具可以用来 ...

  3. PCD(点云数据)文件格式

    本节描述PCD(点云数据)文件格式. 为什么用一种新的文件格式? PCD文件格式并非白费力气地做重复工作,现有的文件结构因本身组成的原因不支持由PCL库引进n维点类型机制处理过程中的某些扩展,而PCD ...

  4. 激光点云系列之一:详解激光雷达点云数据的处理过程

    交流群 | 进"传感器群/滑板底盘群"请加微信号:xsh041388 交流群 | 进"汽车基础软件群"请加微信号:Faye_chloe 备注信息:群名称 + 真 ...

  5. Open3d系列 | 1. Open3d实现点云数据读写、点云配准、点云法向量计算

    如有错误,恳请指出. 从这一篇博客开始,开始利用Open3d来处理点云数据.之后将围绕点云数据的多种处理方式来记录笔记.本篇博客的内容包括点云的文件格式介绍,点云数据的读取,以及点云的配准与点云的法向 ...

  6. 点云数据格式PCD(Point Cloud Data) 数据格式解析

    PCD(点云数据)文件格式 为什么用一种新的文件格式? PCD文件格式并非白费力气地做重复工作,现有的文件结构因本身组成的原因不支持由PCL库引进n维点类型机制处理过程中的某些扩展,而PCD文件格式能 ...

  7. 华云数据升级发布“信创云基座“ 用“全芯全栈”支持“信创强国”

    2021年6月10日,北京--2021年是我国"十四五"规划的开局之年,也是我国"加快数字发展 建设数字中国"的关键之年.值此历史交汇的关键点,云计算.大数据. ...

  8. 用Acceldata数据可观测性方案管理云数据平台Snowflake

    一.云数据平台Snowflake简介 在现代数据堆栈的所有部分中,没有一个像云数据平台Snowflake一样迅速崛起. 虽然作为 Databricks.Amazon Redshift和Google B ...

  9. 从PCD文件写入和读取点云数据

    (1)学习向PCD文件写入点云数据 建立工程文件ch2,然后新建write_pcd.cpp  CMakeLists.txt两个文件 write_pcd.cpp : #include <iostr ...

最新文章

  1. 快速滚动_方老师教滚动快速作文
  2. Spring Autowire自动装配
  3. You have mail in /var/spool/mail/root
  4. 【转】CT球管小知识--热容量
  5. 排除jar_Gradle排除依赖关系
  6. from rfc 2068 hypertext怎么解决_你好,打工人!用英语怎么表达“打工人”?可别直接说 worker...
  7. img = img1*mask + img2*(1-mask) How do that ?
  8. cmd 进入mysql-python_MySQL在cmd和python下的常用操作
  9. php开发类库,php类库_PHP开发中常用类库
  10. python实现翻转给定列表中的元素
  11. stm32例程_如何系统地入门学习stm32?
  12. 方舟生存进化服务器怎么开?方舟生存进化架设服务器教程
  13. vsm什么意思_价值流程图VSM浅析
  14. 地理坐标(经纬度坐标)和屏幕坐标(xy坐标)间的转换
  15. Gitgub学习笔记(二)
  16. 关于namecheap 域名运营商,域名赎回详细步骤
  17. linux查看压缩文件的大小,Linux下不解压压缩文件如何直接查看某个文件大小
  18. ldd显示可执行模块的dependenc
  19. Springboot2.0实现在线图片处理(自动去背景、换背景色等功能)
  20. 原谅我没能像老公那样爱你

热门文章

  1. 程序员常常接私活赚外快吗
  2. php转到网址,php如何实现网址跳转
  3. css 动画 抖动,css3实现循环抖动等动画
  4. 关于自己项目(听书系统)的简介
  5. 在linux下给编辑文件在哪里设置密码,在 Linux 中用 Vim 对文件进行密码保护
  6. 教育大数据总体解决方案(7)
  7. 全面屏+高跑分+区块链,现在游戏本都这么彪悍了?
  8. 什么是游戏建模 3D游戏建模入门难吗?没有美术基础可以学吗?
  9. vue 前端配置按钮权限
  10. 如何让自己的APP更吸引人