天天看点

点云pcd文件的生成

这个教程我们学习怎样把点云数据写入PCD文件。

[cpp]  view plain  copy

  1. #include <iostream>  
  2. #include <pcl/io/pcd_io.h>  
  3. #include <pcl/point_types.h>  
  4. int  
  5.   main (int argc, char** argv)  
  6. {  
  7.   pcl::PointCloud<pcl::PointXYZ> cloud;  
  8.   // Fill in the cloud data  
  9.   cloud.width    = 5;  
  10.   cloud.height   = 1;  
  11.   cloud.is_dense = false;  
  12.   cloud.points.resize (cloud.width * cloud.height);  
  13.   for (size_t i = 0; i < cloud.points.size (); ++i)  
  14.   {  
  15.     cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);  
  16.     cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);  
  17.     cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);  
  18.   }  
  19.   pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);  
  20.   std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;  
  21.   for (size_t i = 0; i < cloud.points.size (); ++i)  
  22.     std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;  
  23.   return (0);  
  24. }  

我们一步一步来分析上面的代码。 [cpp]  view plain  copy

  1. #include <pcl/io/pcd_io.h>  
  2. #include <pcl/point_types.h>  

pcl/io/pcd_io.h 是包含了PCD文件IO操作定义的头文件,pcl/point_types.h 是包含了若干PointT数据结构定义的头文件。

[cpp]  view plain  copy

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

描述我们创建的点云模板类,模板的类型为 PointXYZ。 [cpp]  view plain  copy

  1. // Fill in the cloud data  
  2.   cloud.width    = 5;  
  3.   cloud.height   = 1;  
  4.   cloud.is_dense = false;  
  5.   cloud.points.resize (cloud.width * cloud.height);  
  6.   for (size_t i = 0; i < cloud.points.size (); ++i)  
  7.   {  
  8.     cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);  
  9.     cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);  
  10.     cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);  
  11.   }  

用随机数填充点云数据结构,并设置参数width,height,is_dense。

[cpp]  view plain  copy

  1. pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);  

保存点云数据到test_pcd.pcd文件中。

[cpp]  view plain  copy

  1. std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;  
  2.   for (size_t i = 0; i < cloud.points.size (); ++i)  
  3.     std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;  

运行上面的程序,你可能会看到这样的结果:

[cpp]  view plain  copy

  1. Saved 5 data points to test_pcd.pcd.  
  2.   0.352222 -0.151883 -0.106395  
  3.   -0.397406 -0.473106 0.292602  
  4.   -0.731898 0.667105 0.441304  
  5.   -0.734766 0.854581 -0.0361733  
  6.   -0.4607 -0.277468 -0.916762  

打开生成的pcd文件,你会看到如下样式的东西:

[cpp]  view plain  copy

  1. $ cat test_pcd.pcd  
  2. # .PCD v.5 - Point Cloud Data file format  
  3. FIELDS x y z  
  4. SIZE 4 4 4  
  5. TYPE F F F  
  6. WIDTH 5  
  7. HEIGHT 1  
  8. POINTS 5  
  9. DATA ascii  
  10. 0.35222 -0.15188 -0.1064  
  11. -0.39741 -0.47311 0.2926  
  12. -0.7319 0.6671 0.4413  
  13. -0.73477 0.85458 -0.036173  
  14. -0.4607 -0.27747 -0.91676  

http://blog.csdn.net/leowangzi/article/details/7838138

生成的pcd文件在项目文件夹中的同名文件夹内,比如解决方案pcd.sln在D:\VSprogram\pcd路径下,生成的pcd文件在D:\VSprogram\pcd\pcd下。