博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=84

在本小节我们学习如何从PCD文件中读取点云数据。

代码

首先,在PCL(Point Cloud Learning)中国协助发行的书[1]提供光盘的第4章例1文件夹中,打开名为pcd_read.cpp的代码文件。同目录下可找到测试点云文件test_pcd.pcd。

解释说明

现在,我们解析上面打开的代码。

#include <iostream>           //标准C++库中的输入输出类相关头文件。
#include <pcl/io/pcd_io.h> //pcd 读写类相关的头文件。
#include <pcl/point_types.h> //PCL中支持的点类型头文件。

与本程序相关的头文件声明。

pcl::PointCloud<pcl::PointXYZ>::Ptrcloud(newpcl::PointCloud<pcl::PointXYZ>);

创建一个PointCloud<PointXYZ> boost共享指针并进行实例化。

if(pcl::io::loadPCDFile<pcl::PointXYZ>("test_pcd.pcd",*cloud)==-)//打开点云文件
{
PCL_ERROR("Couldn't read file test_pcd.pcd\n");
return(-);
}

从磁盘上加载PointCloud数据(假设test_pcd.pcd文件已经被创建了)到二进制存储块中。或者,你可以读取PointCloud2存储块(仅仅在PCL 1.x中可用)。由于点云的动态性质,我们更愿意以二进制块来读取,然后转换成我们要使用的表示方式。

sensor_msgs::PointCloud2 cloud_blob;//PointCloud2适合版本低的点云文件
pcl::io::loadPCDFile("test_pcd.pcd",cloud_blob);
pcl::fromROSMsg(cloud_blob,*cloud);
//* sensor_msgs/PointCloud2 转换为 pcl::PointCloud<T>

//错误说明

把二进制块读取并转换到模板化的PointCloud格式里,这里用pcl::PointXYZ作为点类型。

for(size_ti=;i<cloud->points.size();++i)
std::cout<<" "<<cloud->points[i].x
<<" "<<cloud->points[i].y
<<" "<<cloud->points[i].z<<std::endl;

最后在标准输出上打印出从文件中加载的数据。

编译并运行该程序

利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件,生成可执行程序之后,就可以运行了。在cmd中键入以下命令:

...>pcd_read.exe

运行之后,可看见如图1所示的输出结果,在本例中提供的是点云文件版本0.7,所以在代码中没有涉及到PointCloud2,如果用户需要读取版本较低的pcd文件,需要替换点云读取代码为上面描述的PointCloud2读取方式。

图1 点云读取例子运行结果

注意,如果test_pcd.pcd文件不存在(没有创建或者被删除了),将会提示如下错误信息:

Couldn't read file test_pcd.pcd
敬请关注PCL(Point Cloud Learning)中国更多的点云库PCL(Point Cloud Library)相关官方教程。 
参考文献:
1.朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN 978-7-5124-0954-5)北京航空航天出版社 2012-10

从PCD文件中读取点云数据的更多相关文章

  1. 一些常用的文本文件格式(TXT,JSON,CSV)以及如何从这些文件中读取和写入数据

    TXT文件: txt是微软在操作系统上附带的一种文本格式,文件以.txt为后缀. 从txt文件中读取数据: with open ('xxx.txt') as file: data=file.readl ...

  2. c语言链表从本地文件中读取和写入数据

    1 typedef struct Data{ 2 40 char *name; 3 41 char *IDCARD; 4 42 char *job_id; 5 43 char *length; 6 4 ...

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

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

  4. excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)

    将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...

  5. 从文件中读取数组数据————Java

    自己总结一下Java文件的读取类似数组数据的方法,自己可以快速查看. 一.规整化数据: 对于数组数据是一一对应的情况 ArrayList<String> arrayList = new A ...

  6. java从文件中读取数据然后插入到数据库表中

    实习工作中,完成了领导交给的任务,将搜集到的数据插入到数据库中,代码片段如下: static Connection getConnection() throws SQLException, IOExc ...

  7. 从文件中读取yuv和h264数据

    1.从文件中读取h264数据 参考ffmpeg avc.c写的从文件中一帧帧读取h.264数据的demo #include <stdio.h> #include <stdlib.h& ...

  8. 【Python】从文件中读取数据

    从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 ...

  9. TF从文件中读取数据

    从文件中读取数据 在TensorFlow中进行模型训练时,在官网给出的三种读取方式,中最好的文件读取方式就是将利用队列进行文件读取,而且步骤有两步: 把样本数据写入TFRecords二进制文件 从队列 ...

随机推荐

  1. mac manpages 汉化

    默认在终端进行man命令,如:man ls,会显示英文的帮助文档.本文教你如何查看中文文档. 资源:1.manpages-zh-1.5.2.tar.bz22.groff-1.21.tar.gz   - ...

  2. [原创]java WEB学习笔记05:Servlet中的ServletConfig对象

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. Delphi 函数的重载和作用域

    1.在delphi 中,我们可以使用相同的函数名来调用不同的函数,我们称这个函数为重载,函数的参数类型和参数的个数可以不同,用到的关键字overload:格式如下: function addInt(x ...

  4. poj 1144 Network 【求一个网络的割点的个数 矩阵建图+模板应用】

    题目地址:http://poj.org/problem?id=1144 题目:输入一个n,代表有n个节点(如果n==0就结束程序运行). 在当下n的这一组数据,可能会有若干行数据,每行先输入一个节点a ...

  5. JS中不同类型的值比较问题

    我们比较数据的时候大多是以下两种情况: 3 > 4 ; "m" > "n" ; 但有时候可能会出现比较符号两侧的数据类型不相同的场景,例如 5 &g ...

  6. 浅谈WebService开发(一)

    一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使   用WebSer ...

  7. python-多线程趣味

    假设一个程序员,想听歌,但是又想敲代码,于是又: 我听完歌就去敲代码: #! /usr/bin/env python #coding=utf-8 import time def matter1(mus ...

  8. ATL实现COM组件

    参考文献:https://blog.csdn.net/Marcus2006/article/details/41978799 ATL实现COM组件比较简单,关键是在程序中如何调用该组件. vs2010 ...

  9. codeforces 637D D. Running with Obstacles(dp,水题,贪心)

    题目链接: D. Running with Obstacles time limit per test 2 seconds memory limit per test 256 megabytes in ...

  10. codeforces 622D D. Optimal Number Permutation(找规律)

    D. Optimal Number Permutation time limit per test 1 second memory limit per test 256 megabytes input ...