C++代码:从PLY点云中提取聚类中心点
#include
int main(int argc, char** argv) { // 读取PLY文件 pcl::PointCloudpcl::PointXYZ::Ptr cloud(new pcl::PointCloudpcl::PointXYZ); pcl::io::loadPLYFile(argv[1], *cloud);
// 构建KD树
pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;
kdtree.setInputCloud(cloud);
// 进行点云聚类
std::vector<pcl::PointIndices> cluster_indices;
pcl::EuclideanClusterExtraction<pcl::PointXYZ> ec;
ec.setClusterTolerance(0.02); // 设置聚类距离阈值
ec.setMinClusterSize(100); // 设置聚类最小点数
ec.setMaxClusterSize(25000); // 设置聚类最大点数
ec.setSearchMethod(kdtree);
ec.setInputCloud(cloud);
ec.extract(cluster_indices);
// 输出每个聚类的中心点坐标
for (int i = 0; i < cluster_indices.size(); i++) {
pcl::PointCloud<pcl::PointXYZ>::Ptr cluster_cloud(new pcl::PointCloud<pcl::PointXYZ>);
for (int j = 0; j < cluster_indices[i].indices.size(); j++) {
cluster_cloud->push_back(cloud->points[cluster_indices[i].indices[j]]);
}
Eigen::Vector4f centroid;
pcl::compute3DCentroid(*cluster_cloud, centroid);
std::cout << "Cluster " << i << " Centroid: (" << centroid[0] << ", " << centroid[1] << ", " << centroid[2] << ")" << std::endl;
}
return 0;
}
这段代码使用了PCL库,通过构建KD树和聚类提取算法,从PLY文件中提取了点云聚类中心点,并输出了每个聚类的中心点坐标。
原文地址: https://www.cveoy.top/t/topic/nHM2 著作权归作者所有。请勿转载和采集!