PCL 使用 pcl::VoxelGrid 进行缩减采样
PCL downsample with pcl::VoxelGrid
下面的函数没有产生结果。换句话说,点云中的点数与降采样前完全相同。我尝试了从 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;
}
为什么需要所有转换?试试这个:
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
}
下面的函数没有产生结果。换句话说,点云中的点数与降采样前完全相同。我尝试了从 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;
}
为什么需要所有转换?试试这个:
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
}