#include <pcl\point_cloud.h> #include <pcl\point_types.h>

typedef pcl::PointXYZ PointT; typedef pcl::PointCloud PointCloud;

void traversePointCloud(const PointCloud::Ptr& yejian, const PointCloud::Ptr& yr, const PointCloud::Ptr& result) { std::vector count(yejian->size(), 0); // 用于记录 yr 中点在 result 中出现的次数

// 遍历 yejian 中的每个点
for (const auto& point : yejian->points) {
    // 如果 yr 内有一点在 result 中出现 3 次以上,则停止点加入 yr
    if (count[point.x] >= 3)
        break;

    yr->push_back(point);  // 将当前点加入 yr

    // 遍历 result 中的每个点,更新 count
    for (const auto& resPoint : result->points) {
        float dist = pcl::euclideanDistance(point, resPoint);
        if (dist <= 0.01)  // 设定一个阈值,判断是否相连
            count[point.x]++;
    }
}

}

// 注意,上述代码中的阈值 0.01 和 3 次以上的出现次数是可以根据实际需求进行调整的。另外,代码中的 yejianyrresult 分别是指向点云的指针,需要在调用函数前先进行初始化。

C++ 使用 PCL 库遍历点云并基于 Kruskal 最小生成树筛选点

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

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