PCL点云处理:根据坐标映射查找点索引
PCL点云处理:根据坐标映射查找点索引
这段代码演示了如何使用PCL库遍历点云数据,并根据每个点的三维坐标从映射表中查找对应的索引。
pcl::PointIndices value;
std::string key1;
pcl::PointIndices newIndices;
for (const auto& cloud : clouds)
{
for (const auto& point : *cloud)
{
// 访问当前点的坐标和颜色
PointXYZRGB P1;
P1.x = point.x;
P1.y = point.y;
P1.z = point.z;
//cout << x << ',' << y << ',' << z << endl;
key1 = std::to_string(P1.x) + '_' + std::to_string(P1.y) + '_' + std::to_string(P1.z);
if (sliceMap.find(key1) != sliceMap.end())
{
// 输出sliceMap中该键对应的值
cout << '找到了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' << endl;
value = sliceMap[key1].index;
std::cout << 'Key: ' << key1 << ', Value: ' << value << std::endl;
newIndices.indices.insert(newIndices.indices.end(), value.indices.begin(), value.indices.end());
}
}
}
代码解释:
-
定义变量:
pcl::PointIndices value;用于存储查找到的点索引。std::string key1;用于存储点的坐标字符串,作为映射表的键。pcl::PointIndices newIndices;用于存储所有找到的点索引的集合。
-
遍历点云:
- 使用两层循环遍历
clouds中的每个点,外层循环遍历点云集合,内层循环遍历每个点云中的点。
- 使用两层循环遍历
-
生成键值:
- 在内层循环中,将当前点的坐标转换为字符串
key1,格式为 'x_y_z'。
- 在内层循环中,将当前点的坐标转换为字符串
-
查找索引:
- 使用
sliceMap.find(key1)在映射表中查找key1对应的值。 - 如果找到,则执行以下操作:
- 将找到的值的索引赋值给
value。 - 将
value中的索引添加到newIndices的索引集合中。
- 将找到的值的索引赋值给
- 使用
-
结果:
- 循环结束后,
newIndices中存储了所有根据坐标映射找到的点索引。
- 循环结束后,
总结:
这段代码提供了一种在点云数据中根据三维坐标查找对应索引的有效方法,可以用于点云分割、特征提取等应用。
原文地址: https://www.cveoy.top/t/topic/fMPx 著作权归作者所有。请勿转载和采集!