zoukankan      html  css  js  c++  java
  • 从PCD文件中读取点云数据

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

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

    代码

    首先,在PCLPoint 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)==-1)//打开点云文件
    {
    PCL_ERROR("Couldn't read file test_pcd.pcd
    ");
    return(-1);
    }

    从磁盘上加载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=0;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
  • 相关阅读:
    《C++必知必会》读书笔记
    看美图是一种享受
    C指针-指向另一指针的指针
    顺序队列基本操作
    Using Windows Live Writer to write first offline blog
    堆和栈的区别 [摘录]
    进程与线程的区别
    《Effective C#》
    析构函数virtual与非virtual区别
    常用SQL语句技法
  • 原文地址:https://www.cnblogs.com/flyinggod/p/8598454.html
Copyright © 2011-2022 走看看