PCL库去除点云重复点:C++代码示例
#include
int main() { // 加载点云数据 pcl::PointCloudpcl::PointXYZ::Ptr cloud84(new pcl::PointCloudpcl::PointXYZ); pcl::PointCloudpcl::PointXYZ::Ptr cloud85(new pcl::PointCloudpcl::PointXYZ); pcl::io::loadPCDFilepcl::PointXYZ("clouds84.pcd", *cloud84); pcl::io::loadPCDFilepcl::PointXYZ("clouds85.pcd", *cloud85);
// 去除clouds84中与clouds85相同坐标点
std::vector<int> indices;
pcl::removeNaNFromPointCloud(*cloud84, *cloud84, indices);
for (const auto& point : cloud84->points)
{
if (pcl::search::KdTree<pcl::PointXYZ>::isFinite(point))
{
bool isSame = false;
for (const auto& point85 : cloud85->points)
{
if (pcl::search::KdTree<pcl::PointXYZ>::isFinite(point85))
{
if (point.x == point85.x && point.y == point85.y && point.z == point85.z)
{
isSame = true;
break;
}
}
}
if (!isSame)
{
cloud84->push_back(point);
}
}
}
// 保存删除相同坐标点后的clouds84
pcl::io::savePCDFileASCII("clouds84_filtered.pcd", *cloud84);
std::cout << "Filtered clouds84 saved." << std::endl;
return 0;
}
使用该代码示例,首先需要将clouds84.pcd和clouds85.pcd文件放置在同一目录下,并确保已经安装了PCL库并正确配置了相关的依赖项。
此代码示例首先加载了clouds84.pcd和clouds85.pcd中的点云数据。然后使用pcl::removeNaNFromPointCloud函数去除clouds84中的无效点。接下来遍历clouds84中的每个点,通过比较与clouds85中的点是否相同来决定是否保留。最后将删除相同坐标点后的clouds84保存为clouds84_filtered.pcd文件。
请注意,此代码示例仅考虑了点的坐标是否完全相同来判断是否删除,如果需要更加精确的匹配,可以根据实际需求修改判断条件。
原文地址: https://www.cveoy.top/t/topic/qqLq 著作权归作者所有。请勿转载和采集!