例如:
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?
答案 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 ++教程链接进行操作。