【问题标题】:Point Cloud Library - How to assign a single RGB value to an entire point cloud?点云库 - 如何将单个 RGB 值分配给整个点云?
【发布时间】:2017-04-04 20:41:45
【问题描述】:

我想为以下类型的点云数据集中的所有点分配一个 RGB 值:

pcl::PointCloud<pcl::PointXYZRGB>

我猜您可以遍历这些点并更改每个值?使用这样的东西:

uint32_t rgb = (static_cast<uint32_t>(r) << 16 |
  static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
point.rgb = *reinterpret_cast<float*>(&rgb);

但是,考虑到我想为所有点赋予相同的值,是否有更好的方法?

RGB 值需要与每个点或至少与点的集合相关联,以便可以将多个点云组合在一个输出中;每个都有自己独特的颜色。

由于有多个点云,我无法通过PCLVisualizer 设置颜色:

pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> 

我的一个想法是与点云建立高级关联:

std::tie(rgb, pointcloud) = std::make_tuple(
                                uint32_t, pcl::PointCloud<pcl::PointXYZ>);

那么也许我可以多次使用PointCloudColorHandlerCustom 在同一个PCLVisualizer 实例上显示不同颜色的点云?不确定这是否可能。

非常感谢任何帮助!

【问题讨论】:

    标签: c++ c++11 point-cloud-library point-clouds


    【解决方案1】:

    PCL 本身似乎正在执行 for 循环。 看这里:https://github.com/PointCloudLibrary/pcl/blob/46cb8fe5589e88e36d79f9b8b8e5f4ff4fceb5de/visualization/src/point_cloud_handlers.cpp#L63

    所以我想这并不值得付出努力。 但是,如果您使用 C++11,您可以在 1 行中完成(使用 for_each、transform、range-loop)。 像这样的东西(未经测试):

    int32_t rgb = (static_cast<uint32_t>(r) << 16 |
      static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
    std::transform(cloud->points.begin(), cloud->points.end(), cloud->points.begin(), [rgb](pcl::PointXYZRGB p) { p.rgb = rgb; return p;});
    

    或者更好的是一个简单的范围循环

    int32_t rgb = (static_cast<uint32_t>(r) << 16 |
          static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));
    for(auto &p: cloud->points) p.rgb=rgb;
    

    【讨论】:

    • 那么,我最好还是坚持在点云旁边存储一个 RGB 值而不是迭代?然后稍后我可以使用 PCLVisualizer 中的功能。就像你说的那样,这似乎不值得。
    • 你的方法是可能的。或者,您可以拥有一个巨大的点云并使用 pcl::PointXYZL 之类的东西,其中 L 代表标签或带有强度的 pcl::PointXYZI。然后您可以使用 PointCloudColorHandlerLabelField 或 PointCloudColorHandlerGenericField。但是你并没有真正选择可视化中的颜色值。
    • 但是,即使在这种情况下,如果您查看 PCL 的代码,它们也会大量使用循环。所以你并没有真正摆脱它。
    • 确实如此。我想你的方法和使用图书馆的行为之间几乎没有什么区别。
    猜你喜欢
    • 2019-07-20
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多