PCL(2):从PCD文件读取PointCloud数据

今天学习如何从PCD文件读取点云数据。

1、代码

首先,创建一个名为pcd_read.cpp的文件,并将以下代码放入其中:

#include 
#include 
#include 
int
main (int argc, char** argv)
{
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

  if (pcl::io::loadPCDFile<pcl::PointXYZ> ("rabbit_gra.pcd", *cloud) == -1) //* load the file
  {
    PCL_ERROR ("Couldn't read file rabbit_gra.pcd \n");
    return (-1);
  }
  std::cout << "Loaded "
            << cloud->width * cloud->height
            << " data points from rabbit_gra.pcd with the following fields: "
            << std::endl;
  for (std::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);
}

2、说明

现在,让我们逐段分解代码:

  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

创建一个PointCloud Boost共享指针并对其进行初始化

  if (pcl::io::loadPCDFile<pcl::PointXYZ> ("rabbit_gra.pcd", *cloud) == -1) //* load the file
  {
    PCL_ERROR ("Couldn't read file rabbit_gra.pcd \n");
    return (-1);
  }

从磁盘加载PointCloud数据(我会在后边放上点云的数据。)

pcl::PCLPointCloud2 cloud_blob;
pcl::io::loadPCDFile ("rabbit_gra.pcd", cloud_blob);
pcl::fromPCLPointCloud2 (cloud_blob, *cloud); //* convert from pcl/PCLPointCloud2 to pcl::PointCloud

读取二进制斑点并将其转换为模板化的PointCloud格式,此处使用pcl :: PointXYZ作为基础点类型。
最后:

  for (std::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;

用于显示从文件加载的数据。

3、结果

最后是这种样子。如果运行出来了,那就说明程序运行成功了。

Loaded 35947 data points from rabbit_gra.pcd with the following fields:
-1.10698 3.27239 -0.447241
-1.80195 3.36709 -0.704211
-4.12496 5.60279 2.82482
2.44725 3.49339 1.4273
0.41545 3.14589 -0.179121
0.16521 3.07049 -0.270481
-1.0361 3.22329 -0.715151
5.99729 1.74759 1.8739
6.48024 1.45389 0.722179
0.12516 1.73519 2.77296
0.22293 1.74199 2.83998
5.4163 2.63439 1.22737
-3.61362 6.32029 -2.65342

点云很多,我就贴出了前几行。

4、注意:

请注意,如果文件rabbit_gra.pcd不存在(尚未创建或已被擦除),则应显示以下错误消息:

Couldn't read file rabbit_gra.pcd

5、PCD的问题

任何一个PCD都行。把PCD文件放在这个项目的文件夹中,然后把PCD文件的文件名复制粘贴在程序里就可以了。

我的点云素材:

链接:https://pan.baidu.com/s/1ZyDR0MaFxwJ0BSSwefPwUQ
提取码:ezo7

你可能感兴趣的:(点云)