#include <unordered_map>
#include <vector>

// 假设 PointXYZRGB 和 Slice 结构已定义

// ...

std::unordered_map<PointXYZRGB, Slice> sliceMap; // 用于存储切片层关系的哈希表
std::vector< Slice> SALL; // 用于存储所有切片的向量

// 创建指定数量 (56) 的切片层
for (int i = 0; i < 56; ++i)
{
    Slice slices;
    SALL.push_back(slices); // 将新切片添加到向量中

    Slice slice0 = SALL[i]; // 通过索引访问新添加的切片
    slice0.index = cluster_indices[i]; // 分配切片索引 (假设 cluster_indices 已定义)
    // 从其他数据源 (假设 cluster_centroids 已定义) 分配质心坐标
    slice0.centroid.x = cluster_centroids->points[i].x;
    slice0.centroid.y = cluster_centroids->points[i].y;
    slice0.centroid.z = cluster_centroids->points[i].z;

    sliceMap[slice0.centroid] = slice0; // 将切片存储在哈希表中,使用其质心作为键
}
// ...

这段代码演示了如何使用 std::unordered_mapstd::vector 在 C++ 中创建和存储点云数据的切片层。

以下是代码的细分:

  1. 初始化:

    • sliceMap: 声明一个 std::unordered_map,将 PointXYZRGB 对象(表示质心)映射到 Slice 对象。这允许通过其质心快速检索切片。
    • SALL: 声明一个 std::vector 来存储所有切片,提供对切片的顺序访问。
  2. 切片创建循环:

    • 代码使用 for 循环创建 56 个切片层。
    • 在每次迭代中,都会创建一个新的 Slice 对象并将其添加到 SALL 向量中。
  3. 切片初始化:

    • 从向量中检索新创建的切片,并为其分配索引和质心坐标。
    • 假设 cluster_indicescluster_centroids 是预先定义的数组或包含此信息的结构。
  4. 哈希表插入:

    • 使用切片的质心作为键,在 sliceMap 中创建切片的条目。这允许通过其质心坐标有效地访问单个切片。

总之,这段代码展示了一种组织和存储点云数据切片层的有效方法,允许通过索引或质心坐标轻松检索。

C++点云处理:使用哈希表和向量创建和存储切片层

原文地址: https://www.cveoy.top/t/topic/fK4T 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录