这个错误是由于在删除点时,索引超出了点云的范围导致的。可以通过修改代码来解决这个问题:

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循环来遍历点云,并且在删除点后不更新索引,而是只有在点保留的情况下才增加索引。这样可以避免索引超出范围的问题

pcloctreeOctreePointCloudSearchpclPointXYZRGB octree00015;	octreesetInputCloudcloud84;	octreeaddPointsFromInputCloud;	 遍历每个点	for int i = 0; i cloud84-size; ++i			pclPointXYZRGB searchPoint = cloud84-

原文地址: http://www.cveoy.top/t/topic/iKeE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录