[Point Cloud Library] 点云数据写入PCD文件



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

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

我们一步一步来分析上面的代码。

[cpp]  view plain copy print ?
  1. #include   
  2. #include   

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

[cpp]  view plain copy print ?
  1. pcl::PointCloud cloud;  
描述我们创建的点云模板类,模板的类型为 PointXYZ。

[cpp]  view plain copy print ?
  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.   
  7.   for (size_t i = 0; i < cloud.points.size (); ++i)  
  8.   {  
  9.     cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);  
  10.     cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);  
  11.     cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);  
  12.   }  

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

[cpp]  view plain copy print ?
  1. pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);  

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

[cpp]  view plain copy print ?
  1. std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;  
  2.   
  3.   for (size_t i = 0; i < cloud.points.size (); ++i)  
  4.     std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;  
运行上面的程序,你可能会看到这样的结果:

[cpp]  view plain copy print ?
  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 print ?
  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  

你可能感兴趣的:(PCL)