C++点云处理:合并与存储质心点
C++点云处理:合并与存储质心点
这段代码的功能是将两个点云数据的质心点和索引合并,并将合并后的数据存储到一个容器中,以便于后续处理和分析。
void haxi()
{
// 首先将两个得到的之心点加起来
*all_cluster_centroids += *cluster_centroids;
*all_cluster_centroids += *by_cluster_centroids;
pcl::io::savePLYFileASCII('E:\dianyun\guo\output11.ply', *all_cluster_centroids);
// 再将两个得到的索引加起来,没有必要因为加起来就是整个点云数据的索引
all_cluster_indices.insert(all_cluster_indices.end(), cluster_indices.begin(), cluster_indices.end());
all_cluster_indices.insert(all_cluster_indices.end(), by_cluster_indices.begin(), by_cluster_indices.end());
std::vector<Slice> SALL;// 创建一个Slice结构体的容器,里面由质心点和构成该质心点的类的
for (int i = 0; i < all_cluster_centroids->size(); ++i)
{
Slice slices;// 根据循环会创建cluster_centroids->size()个结构体
SALL.push_back(slices);// 往容器内添加结构体,将下面产生的结构体数据赋值给这些新的结构体
Slice& slice0 = SALL[i];// 创建slice0表示概括性结构
slice0.index = all_cluster_indices[i];
slice0.centroid.x = all_cluster_centroids->points[i].x;
slice0.centroid.y = all_cluster_centroids->points[i].y;
slice0.centroid.z = all_cluster_centroids->points[i].z;
// 将质心点用字符的形式表示键
std::string key = std::to_string(slice0.centroid.x) + '_' + std::to_string(slice0.centroid.y) + '_' + std::to_string(slice0.centroid.z);
sliceMap[key] = slice0;
}
for (auto it = sliceMap.begin(); it != sliceMap.end(); ++it)
{
std::cout << 'Key: ' << it->first << std::endl;
std::cout << 'Value: ' << std::endl;
std::cout << ' Index: ' << it->second.index << std::endl;
std::cout << ' Centroid: (' << it->second.centroid.x << ', ' << it->second.centroid.y << ', ' << it->second.centroid.z << ')' << std::endl;
}
std::cout << 'Number of keys: ' << sliceMap.size() << std::endl;
}
代码解释:
- 合并质心点和索引:
- 代码首先将两个输入点云数据的质心点相加,并将结果存储在
all_cluster_centroids变量中。 - 然后,它将两个点云数据的索引合并到
all_cluster_indices变量中。
- 代码首先将两个输入点云数据的质心点相加,并将结果存储在
- 存储质心点和索引:
- 创建一个名为
SALL的向量,用于存储Slice结构体。每个Slice结构体包含一个质心点和其对应的索引。 - 遍历所有质心点,为每个质心点创建一个
Slice结构体,并将质心点的坐标和索引存储在结构体中。 - 为了方便后续查找,代码将质心点的坐标转换为字符串作为键,将
Slice结构体存储在一个名为sliceMap的映射容器中。
- 创建一个名为
- 输出结果:
- 代码遍历
sliceMap容器,输出每个质心点的键(坐标字符串)、索引和坐标值。 - 最后,输出
sliceMap容器的大小,即质心点的数量。
- 代码遍历
总结:
这段代码展示了如何使用C++合并和存储点云数据的质心点和索引信息。这种操作在点云配准、目标识别和场景理解等应用中非常常见。
原文地址: https://www.cveoy.top/t/topic/fMR5 著作权归作者所有。请勿转载和采集!