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;
}

代码解释:

  1. 合并质心点和索引:
    • 代码首先将两个输入点云数据的质心点相加,并将结果存储在 all_cluster_centroids 变量中。
    • 然后,它将两个点云数据的索引合并到 all_cluster_indices 变量中。
  2. 存储质心点和索引:
    • 创建一个名为 SALL 的向量,用于存储 Slice 结构体。每个 Slice 结构体包含一个质心点和其对应的索引。
    • 遍历所有质心点,为每个质心点创建一个 Slice 结构体,并将质心点的坐标和索引存储在结构体中。
    • 为了方便后续查找,代码将质心点的坐标转换为字符串作为键,将 Slice 结构体存储在一个名为 sliceMap 的映射容器中。
  3. 输出结果:
    • 代码遍历 sliceMap 容器,输出每个质心点的键(坐标字符串)、索引和坐标值。
    • 最后,输出 sliceMap 容器的大小,即质心点的数量。

总结:

这段代码展示了如何使用C++合并和存储点云数据的质心点和索引信息。这种操作在点云配准、目标识别和场景理解等应用中非常常见。

C++点云处理:合并与存储质心点

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

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