pcloctreeOctreePointCloudSearchpclPointXYZRGB octree00015; octreesetInputCloudcloud84; octreeaddPointsFromInputCloud; 遍历每个点 for int i = 0; i cloud84-size; ++i pclPointXYZRGB searchPoint = cloud84-
这个错误是由于在删除点时,索引超出了点云的范围导致的。可以通过修改代码来解决这个问题:
pcl::octree::OctreePointCloudSearch<pcl::PointXYZRGB> octree(0.0015);
octree.setInputCloud(cloud84);
octree.addPointsFromInputCloud();
// 遍历每个点
int i = 0;
while (i < cloud84->size())
{
pcl::PointXYZRGB searchPoint = cloud84->at(i);
// 在半径0.003范围内搜索点
std::vector<int> pointIdxRadiusSearch;
std::vector<float> pointRadiusSquaredDistance;
octree.radiusSearch(searchPoint, 0.003, pointIdxRadiusSearch, pointRadiusSquaredDistance);
// 如果点的个数小于6个,则删除该点
if (pointIdxRadiusSearch.size() < 6)
{
cloud84->erase(cloud84->begin() + i);
}
else
{
++i;
}
}
在上面的代码中,我们使用了一个while循环来遍历点云,并且在删除点后不更新索引,而是只有在点保留的情况下才增加索引。这样可以避免索引超出范围的问题
原文地址: http://www.cveoy.top/t/topic/iKeE 著作权归作者所有。请勿转载和采集!