PCL(3):将Point Cloud数据写入PCD文件

上回书讲的是把PCD文件读成点云数据,这回我们说说怎么将点云数据写入PCD文件。

1、代码

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

#include 
#include 
#include 
int
  main (int argc, char** argv)
{
  pcl::PointCloud<pcl::PointXYZ> cloud;
  // Fill in the cloud data
  cloud.width    = 5;
  cloud.height   = 1;
  cloud.is_dense = false;
  cloud.points.resize (cloud.width * cloud.height);
  for (std::size_t i = 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);
  }
  pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);
  std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;

  for (std::size_t i = 0; i < cloud.points.size (); ++i)
    std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;
  system("pause");
  return (0);
}

2、说明

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

#include 
#include 

第一个文件是包含PCD 的I/O操作定义的头文件,第二个文件包含几个点类型结构的定义,包括pcl::PointXYZ。我们要使用的结构就是这个。

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

描述了我们将创建的模板化PointCloud结构,类型的每个点的被设定为pcl::PointXYZ。

// Fill in the cloud data
  cloud.width    = 5;
  cloud.height   = 1;
  cloud.is_dense = false;
  cloud.points.resize (cloud.width * cloud.height);

  for (std::size_t i = 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结构,并设置适当的参数(宽度,高度,is_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 (std::size_t i = 0; i < cloud.points.size (); ++i)
    std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;

用于显示生成的数据。

3、结果

您将看到类似于以下内容:

Saved 5 data points to test_pcd.pcd.
1.28125 577.094 197.938
828.125 599.031 491.375
358.688 917.438 842.563
764.5 178.281 879.531
727.531 525.844 311.281

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