使用 PCL 库从点云数据中删除重复数据
下面是一个基于 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' 文件中。
原文地址: https://www.cveoy.top/t/topic/qqLc 著作权归作者所有。请勿转载和采集!