如何获得给定PointCloud的PointIndices?

时间:2017-01-31 15:07:32

标签: c++ point-cloud-library

例如:

pcl::PointCloud<pcl::PointXYZI>::Ptr example_cloud(new pcl::PointCloud<pcl::PointXYZI>);

//cloud is populated

pcl::PointIndices::Ptr point_indices(new pcl::PointIndices); 

如何使用example_cloud的索引填充point_indices?

2 个答案:

答案 0 :(得分:0)

在我的情况下,我将RANSAC与PCL一起使用,并且对象pcl :: RandomSampleConsensus具有方法getInliers(vector&),并且使用此方法后,在应用RANSAC后获得了结果的索引。可以将getInliers(vector&)的向量分配给point_indices。最后,我需要一种方法,就像您在评论中回答的那样,将另一个点云减去。接下来是减去点云的代码:

void subtract_points(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, const vector<int>& inliers)
{
  pcl::PointIndices::Ptr fInliers (new pcl::PointIndices);

  fInliers->indices = inliers;

  pcl::ExtractIndices<pcl::PointXYZ> extract;
  extract.setInputCloud (cloud);
  extract.setIndices (fInliers);
  extract.setNegative(true);
  extract.filter(*cloud);
}

用于获取索引向量的具体代码是(使用RANSAC):

vector<int> inliers;
// Plane model
pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr model_p (new pcl::SampleConsensusModelPlane<pcl::PointXYZ> (cloud));

pcl::RandomSampleConsensus<pcl::PointXYZ> ransac (model_p);
ransac.getInliers(inliers);

如您所见,稍后我们可以定义一个PointIndice对象并直接分配索引向量:point_indices-> indices = my_indices

我希望它对寻找相同内容的人有所帮助(点云减去的代码有效)。

答案 1 :(得分:0)

pcl :: ExtractIndices的另一个答案很好用,但我只想添加使用pcl::copyPointCloud (const pcl::PointCloud< PointT > &cloud_in, const std::vector< pcl::PointIndices > &indices, pcl::PointCloud< PointT > &cloud_out)

的可能性

以便您可以像这样使用它

curl https://www.google.com

此外,如果您正在寻找不同之处,则可以尝试使用c++ set_difference。 PointIndices :: indices本质上是std::vector,因此您可以按照c ++教程链接进行操作。