生成pcd文件

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

[cpp]  view plain  copy
 print ?
  1. #include <iostream>  
  2. #include <pcl/io/pcd_io.h>  
  3. #include <pcl/point_types.h>  
  4.   
  5. int  
  6.   main (int argc, char** argv)  
  7. {  
  8.   pcl::PointCloud<pcl::PointXYZ> 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 <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
 print ?
  1. pcl::PointCloud<pcl::PointXYZ> 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  


注意:生成的pcd文件在项目文件夹里的同名文件夹下,例如:
我的解决方案在D:\VSprogram\pcd路径下,生成的pcd文件在D:\VSprogram\pcd\pcd下
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值