adamjonison 2023-04-09 21:55 采纳率: 0%
浏览 79
已结题

pcl库实现点云带索引/编号,统计滤波后能看到过滤点云的索引/编号

c++内的pcl库想实现一个功能,原始点云是带索引或者编号的(实现带索引或者编号其一功能即可。编号不是1,2,3,4,5这种一一排序的,可能是11,34,66这种跳跃的。能实现编号功能最好,方便后期定位查找),通过统计滤波后想知道哪些索引或者编号的点是被过滤掉的,可以直接定位这些过滤掉的点的编号。但是pcl自带库似乎是只传出点云数据,但是编号是不传出的,想实现也能传出编号功能。

由于刚接触c++内的pcl库功能,有很多不太了解的功能代码书写,还望细致解答,谢谢!

  • 写回答

7条回答 默认 最新

  • CQ.abc 2023-04-09 22:30
    关注

    以下回答结合了ChatGPT:
    您好!关于您的问题,如果您想在 PCL 中实现带索引或编号的点云功能,可以使用 PCL 中的 PointXYZRGBL 或 PointXYZIL 类型。这两种类型都包含了一个字段,可以用于存储点的索引或编号。

    例如,您可以使用 PointCloud 类型来表示一个带有 RGB 颜色和索引的点云:

    
    #include <pcl/point_types.h>
    #include <pcl/point_cloud.h>
    
    typedef pcl::PointXYZRGBL PointT;
    typedef pcl::PointCloud<PointT> PointCloud;
    
    PointCloud::Ptr cloud (new PointCloud);
    // ... 添加点到点云中 ...
    
    // 读取第一个点的索引
    uint32_t index = cloud->points[0].label;
    

    同样,使用 PointXYZIL 类型也类似:

    
    #include <pcl/point_types.h>
    #include <pcl/point_cloud.h>
    
    typedef pcl::PointXYZIL PointT;
    typedef pcl::PointCloud<PointT> PointCloud;
    
    PointCloud::Ptr cloud (new PointCloud);
    // ... 添加点到点云中 ...
    
    // 读取第一个点的编号
    uint32_t id = cloud->points[0].label;
    
    

    注意,如果您使用 PointCloud 类型来表示点云,则必须为每个点手动设置索引或编号。这可以通过将字段设置为 PointCloud 中每个点的 label 字段来完成。

    希望这可以帮助到您!如果您有任何其他问题,请随时问我。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月15日
  • 修改了问题 4月9日
  • 创建了问题 4月9日