下面是一个基于 PCL 库的示例代码,用于从 'clouds84' 中删除与 'clouds85' 相同的数据:

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

int main(int argc, char** argv)
{
    // 加载点云数据
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud84(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud85(new pcl::PointCloud<pcl::PointXYZ>);
    
    if (pcl::io::loadPCDFile<pcl::PointXYZ>('clouds84.pcd', *cloud84) == -1 ||
        pcl::io::loadPCDFile<pcl::PointXYZ>('clouds85.pcd', *cloud85) == -1)
    {
        PCL_ERROR('Couldn't read PCD file \n');
        return -1;
    }
    
    // 定义一个 vector 用于保存与 'clouds85' 相同的点索引
    std::vector<int> indices;
    
    // 执行点云滤波,找出与 'clouds85' 相同的点索引
    pcl::removeNaNFromPointCloud(*cloud84, *cloud84, indices);
    pcl::IndicesPtr indices_ptr(new std::vector<int>(indices));
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud84_filtered(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::ExtractIndices<pcl::PointXYZ> extract;
    extract.setInputCloud(cloud84);
    extract.setIndices(indices_ptr);
    extract.setNegative(true);
    extract.filter(*cloud84_filtered);
    
    // 保存滤波后的点云数据
    pcl::io::savePCDFileBinary('clouds84_filtered.pcd', *cloud84_filtered);
    
    return 0;
}

上述代码加载了两个点云文件 'clouds84.pcd' 和 'clouds85.pcd',然后使用 pcl::removeNaNFromPointCloud 函数从 'clouds84' 中移除与 'clouds85' 相同的点数据,最后将滤波后的点云数据保存到 'clouds84_filtered.pcd' 文件中。

使用 PCL 库从点云数据中删除重复数据

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

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