向PCD文件写入点云数据

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

本小节我们学习如何向PCD文件写入点云数据。

代码

首先,在PCLPoint Cloud Learning)中国协助发行的书[1]提供光盘的第4章例2文件夹中,打开名为pcd_write.cpp的代码文件。

解释说明

现在,我们解析上面代码:

#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

pcl/io/pcd_io.h头文件中包含了PCD输入输出操作的声明,pcl/point_types.h头文件则包含一些PointT类型结构体的声明(本例中是pcl::PointXYZ)。

pcl::PointCloud<pcl::PointXYZ>cloud;

描述我们将要实例化的模板类PointCloud,每一个点的类型都被设置成pcl::PointXYZ,作为模板类实例化的参数,其他类型请参考点类型介绍一节,pcl::PointXYZ具体定义如下下面:

// 点PointXYZ类型对应的数据结构
Struct PointXYZ
{
floatx;
floaty;
floatz;
};

下面这几行:

// 创建点云
cloud.width=5;
cloud.height=1;
cloud.is_dense=false;
cloud.points.resize(cloud.width*cloud.height);
for(size_ti=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点云对象,并设置适当的参数(widthheightis_dense)。然后:

pcl::io::savePCDFileASCII("test_pcd.pcd",cloud);

PointCloud对象数据存储在test_pcd.pcd文件中。最后:

std::cerr<<"Saved "<<cloud.points.size()<<" data points to test_pcd.pcd."<<std::endl;
for(size_ti=0;i<cloud.points.size();++i)
std::cerr<<"    "<<cloud.points[i].x<<" "<<cloud.points[i].y<<" "<<cloud.points[i].z<<std::endl;

上面几行代码用来打印输出存储的点云数据。

编译并运行该程序

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

...>pcd_write.exe

将在cmd界面看到类似下面的东西:

 

1 点云写入例子运行结果 

Linux下用户可以方便的用下面的命令检查test_pcd.pcd文件的内容,在window上的用户直接用一般的word等就可以对pcd文件进行打开(只限于0.7版本的,低版本的打开显示不完整)。

$ cattest_pcd.pcd
# .PCD v.5 - Point Cloud Data file format
FIELDS x y z
SIZE 4 4 4
TYPE F FF
WIDTH 5
HEIGHT 1
POINTS 5
DATA ascii
0.35222 -0.15188 -0.1064
-0.39741 -0.47311 0.2926
-0.7319 0.6671 0.4413
-0.73477 0.85458 -0.036173
-0.4607 -0.27747 -0.91676

 

敬请关注PCLPoint Cloud Learning)中国更多的点云库PCLPoint Cloud Library)相关官方教程。

参考文献:

1.朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN 978-7-5124-0954-5)北京航空航天出版社 2012-10

 

 

posted @ 2018-03-19 00:18  采男孩的小蘑菇  阅读(3496)  评论(0编辑  收藏  举报