PCL读取文件

1.官方示例代码

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

int
main (int argc, char** argv)
{
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);

  if (pcl::io::loadPCDFile<pcl::PointXYZ> ("test_pcd.pcd", *cloud) == -1) //* load the file
  {
    PCL_ERROR ("Couldn't read file test_pcd.pcd \n");
    return (-1);
  }
  std::cout << "Loaded "
            << cloud->width * cloud->height
            << " data points from test_pcd.pcd with the following fields: "
            << std::endl;
  for (std::size_t i = 0; i < cloud->points.size (); ++i)
    std::cout << "    " << cloud->points[i].x
              << " "    << cloud->points[i].y
              << " "    << cloud->points[i].z << std::endl;

  return (0);
}

2.代码解读

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

#include <pcl/point_types.h>

 包含PCL点云中的点格式 pcl::PointXYZ ,这种格式只包含x,y,z三个坐标,类型为float。

#include <pcl/io/pcd_io.h>

 包含 pcl::io::loadPCDFile<pcl::PointXYZ> (“test_pcd.pcd”, *cloud) 读取文件函数。

  • 第一个参数是读取文件的路径;
  • 第二个参数是将读取的点云数据放入的点云对象;
  • 返回一个int类型值,读取成功返回0,失败返回-1;

点云创建和数据访问

创建点云指针对象

pcl::PointCloud<pcl::PointXYZ>::Ptr 
cloud (new pcl::PointCloud<pcl::PointXYZ>);
  • 创建的是个boost::shared_ptr类型的指针对象,可以当成普通指针使用,构造函数需要传递一个同类型的普通指针;

创建点云对象

 当然你也可以创建一个普通的点云对象,但是需要设置大小

  • 先创建一个点云对象,再去设置大小:
pcl::PointCloud<pcl::PointXYZ> cloud;//调用默认构造函数
cloud.height = 1;//设置点云高度,一般设置为1
cloud.width = 100;//设置点云宽度,一般为点云数量
cloud.resize(cloud.height * cloud.width);//最后设置点云大小

 值得注意的是点云对象的创建需要先设置height和width,再去resize,不能直接resize。


点云的数据访问

 点云对象比较重要的几个公共数据。

points

 访问第i个点的xyz坐标(如果点云包含RGB数据,访问方式类似)

cloud->points[i].x;//cloud.points[i].x;
cloud->points[i].y;//cloud.points[i].y;
cloud->points[i].z;//cloud.points[i].z;
height和width
cloud->height;
cloud->width;
is_dense
cloud->is_dense;

 这是个布尔值,true表示所有值可用,false表示有无效值。


其他点云成员函数

begin()和end()

 返回点云迭代器。

size()

 返回点云大小。


PointCloud类模板官方文档

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值