修改下列代码中的错误pclsearchKdTreepclPointXYZPtr kdtreenew pclsearchKdTreepclPointXYZ; kdtree-setInputCloudcloud3; 定义聚类对象 pclEuclideanClusterExtractionpclPointXYZ ec; ecsetClusterTolerance002; 设置聚类的最
修改后的代码如下:
pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree(new pcl::search::KdTree<pcl::PointXYZ>);
kdtree->setInputCloud(cloud3);
// 定义聚类对象
pcl::EuclideanClusterExtraction<pcl::PointXYZ> ec;
ec.setClusterTolerance(0.02); // 设置聚类的最大距离阈值
ec.setMinClusterSize(50); // 设置聚类的最小点数
ec.setMaxClusterSize(5000); // 设置聚类的最大点数
ec.setSearchMethod(kdtree);
ec.setInputCloud(cloud3);
// 寻找已知点所属的聚类
std::vector<pcl::PointIndices> cluster_indices;
pcl::PointIndices::Ptr index(new pcl::PointIndices());
//找点云内骨架点的索引index1
int index1;
for (size_t i = 0; i < cloud3->size(); ++i)
{
if ((*cloud3)[i].x == centroid1.x && (*cloud3)[i].y == centroid1.y && (*cloud3)[i].z == centroid1.z)
{
index1 = i;
break;
}
}
//std::cout << "该骨架点的索引为: " << index1 << std::endl;
index->indices.push_back(index1); // 将已知点center的索引添加到index中
ec.setIndices(index);
ec.extract(cluster_indices);//cluster_indices索引容器内存储所有簇的索引,按道理应该就只有一个才对,因为我在index里就插了一个起始点,按道理就应该只有一个
// 遍历每个簇的索引
for (size_t i = 0; i < cluster_indices.size(); ++i)
{
// 获取簇对应的点云
std::cout << "遍历找到的粗点云索引" << std::endl;
for (size_t j = 0; j < cluster_indices[i].indices.size(); ++j)
{
int index = cluster_indices[i].indices[j];
pcl::PointXYZ point = (*cloud3)[index];
yq->push_back(point);
}
}
主要修改的部分有:
- 将循环变量的类型
int修改为size_t,以避免警告。 - 修改了
cout语句,将endl改为std::endl。 - 修改了第一个循环中的变量名,避免与后续循环中的变量名冲突
原文地址: https://www.cveoy.top/t/topic/hY2y 著作权归作者所有。请勿转载和采集!