从PCD文件中读取点云数据(Reading Point Cloud data from PCD files)

在本教程中,我们将学习如何从PCD文件中读取点云数据。

#代码
首先,在你最喜欢的编辑器中创建一个名为pcd_read.cpp的文件,并在其中放置下面的代码:

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

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

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

#说明
现在,让我们逐一分解代码。

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

创建一个PointCloud <PointXYZ> boost共享指针并初始化它。

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

从磁盘加载PointCloud数据(我们假设test_pcd.pcd已经从前面的教程中创建)到binary blob中。
或者,您可以阅读PCLPointCloud2 blob(仅在PCL 1.x中可用)。由于点云的动态特性,我们倾向于将它们读为binary blobs,然后转换为我们想要使用的实际表示。

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

读取binary blob并将其转换为模板化的PointCloud格式,此处使用pcl::PointXYZ作为基础点类型。

最后:

  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;

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

#编译和运行程序
将下面的行添加到您的CMakeLists.txt文件中:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(pcd_read)

find_package(PCL 1.2 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

add_executable (pcd_read pcd_read.cpp)
target_link_libraries (pcd_read ${PCL_LIBRARIES})

制作好可执行文件之后,就可以运行它了。简单地做:

./pcd_read

你会看到类似于:

Loaded 5 data points from test_pcd.pcd with the following fields: x y z
  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

请注意,如果文件test_pcd.pcd不存在(不是已创建或已被删除),则应该收到错误消息,如:

Couldn't read file test_pcd.pcd

Reading Point Cloud data from PCD files

猜你喜欢

转载自blog.csdn.net/RuoQiQingCheDi/article/details/83959188
今日推荐