用pcl :: VoxelGrid进行PCL下采样

时间:2017-04-06 04:28:07

标签: c++ point-cloud-library

以下功能不会产生任何结果。换句话说,点云中的点数与下采样前的点数完全相同。我尝试了各种数量的叶子大小从0.01一直到你在下面看到的那些,但它们都产生相同的结果。我不得不通过转换(如下所示)从pcl::PointCloud<T>转到pcl::PCLPointCloud2,因此我怀疑这可能是问题所在。

如果您有类似的问题并解决了,请告诉我。 谢谢。

typedef pcl::PointCloud<pcl::PointXYZ>::Ptr PointCloudPtr;

void PlantVis::downsample(PointCloudPtr cloud) {
    pcl::PCLPointCloud2::Ptr cloud2(new pcl::PCLPointCloud2());
    pcl::toPCLPointCloud2(*cloud, *cloud2);

    pcl::PCLPointCloud2::Ptr cloud_filtered(new pcl::PCLPointCloud2());

    pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
    sor.setInputCloud(cloud2);
    sor.setLeafSize(500000000.01f, 500000000.01f, 500000000.01f);
    sor.filter(*cloud_filtered);

    pcl::PointCloud<pcl::PointXYZ>::Ptr m_cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::fromPCLPointCloud2(*cloud_filtered, *m_cloud);
    cloud = m_cloud;
}

1 个答案:

答案 0 :(得分:1)

为什么需要所有转化?试试这个:

void PlantVis::downsample(PointCloudPtr cloud) {
    PointCloudPtr output(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::VoxelGrid<pcl::PointXYZ> sor;
    sor.setInputCloud(input_cloud);
    sor.setLeafSize(0.001f, 0.001f, 0.001f);
    sor.filter(*output);

    //display or do something else with output
}