将点云数据写入PCD文件

学习记录: 

 #include <iostream>
 #include <pcl/io/pcd_io.h>
 #include <pcl/point_types.h>
 
 int
   main ()
 {
     /*pcl::PointCloud<pcl::PointXYZ>: 这是定义一个名为cloud的变量,
     该变量是pcl::PointCloud类型的模板实例,其中pcl::PointXYZ是点的类型。
     pcl::PointXYZ表示一个包含X、Y、Z坐标的3D点。
	 cloud;: 这是一个声明语句,创建了一个名为cloud的变量。
     点PointXYZ类型对应的数据结构
    Structure PointXYZ{
     float x;
     float y;
     float z;
    };*/
   pcl::PointCloud<pcl::PointXYZ> cloud;
 
  // Fill in the cloud data
     /*这行代码将cloud对象的width属性设置为5。将cloud对象的height属性设置为1。
     cloud对象的is_dense属性设置为false*/
  cloud.width    = 5;
  cloud.height   = 1;
  cloud.is_dense = false;
     /*不是稠密型,is_dense(布尔值)指定点中的所有数据是否都是有限的(true),
    或者某些点的XYZ值是否可能包含Inf/NaN值(false)。表示点云是否是稠密的。
    如果is_dense为true,则点云中的所有数据都是有限的;
    如果为false,则表示点云中可能包含Inf/NaN值。*/
  cloud.resize (cloud.width * cloud.height);/*点云总数大小,调用resize方法来调整cloud的大小。
     它通过将width和height的乘积作为参数传递给resize方法,将点云的大小调整为在x轴和y轴上的点的总数。*/
     

  for (auto& point: cloud)//这是一个基于范围的for循环,它遍历cloud对象中的每个点,并将每个点的引用赋值给point变量。
  {
    point.x = 1024 * rand () / (RAND_MAX + 1.0f);
    point.y = 1024 * rand () / (RAND_MAX + 1.0f);
    point.z = 1024 * rand () / (RAND_MAX + 1.0f);
      /*point.x = 1024 * rand () / (RAND_MAX + 1.0f);
      这行代码将一个随机值赋给point的x坐标。rand()函数返回一个随机整数,
      范围是0到RAND_MAX(通常是一个相当大的整数,表示随机数生成器能生成的最大值)。
      这个值被乘以1024并除以RAND_MAX + 1.0f,
      以确保结果在0到1024之间,这样生成的随机数可以用来设置点的x坐标。同理设置y,z的坐标值。*/
  }

     /*用于将点云数据保存为PCD文件。
     pcl::io::savePCDFileASCII是PCL库中的一个函数,
     用于将点云数据保存为ASCII格式的PCD文件。
     ("test_pcd.pcd", cloud)是该函数的参数,
     其中"test_pcd.pcd"是保存文件的名字,cloud是要保存的点云对象。*/
  pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);

   /*std::cerr: 这是C++标准库中的一个对象,通常用于输出错误消息。
   它是一个输出流,类似于std::cout,但通常用于错误消息。
   cloud.size (): 这调用cloud对象的size方法,
   以获取点云中的数据点数量。这个数值将用于后面的输出。*/  
  std::cerr << "Saved " << cloud.size () << " data points to test_pcd.pcd." << std::endl;

    /*for (const auto& point: cloud): 这是一个基于范围的for循环,
    它遍历cloud对象中的每个点,并将每个点的引用赋值给point变量。
    这里的const auto&表示使用常量引用类型,意味着不能修改point所引用的值。
    整体意思是在打印出每个点的x、y、z坐标,并在每个坐标后面添加一个换行符,
    以便每个点的坐标都单独占据一行。*/
  for (const auto& point: cloud)
    std::cerr << "    " << point.x << " " << point.y << " " << point.z << std::endl;

  return (0);
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值