#include #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/filters/filter.h>

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.pcdclouds85.pcd文件放置在同一目录下,并确保已经安装了PCL库并正确配置了相关的依赖项。

此代码示例首先加载了clouds84.pcdclouds85.pcd中的点云数据。然后使用pcl::removeNaNFromPointCloud函数去除clouds84中的无效点。接下来遍历clouds84中的每个点,通过比较与clouds85中的点是否相同来决定是否保留。最后将删除相同坐标点后的clouds84保存为clouds84_filtered.pcd文件。

请注意,此代码示例仅考虑了点的坐标是否完全相同来判断是否删除,如果需要更加精确的匹配,可以根据实际需求修改判断条件。

PCL库去除点云重复点:C++代码示例

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

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