#include #include #include <pcl/io/ply_io.h> #include <pcl/point_types.h> #include <pcl/kdtree/kdtree_flann.h> #include <pcl/common/centroid.h>

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文件中提取了点云聚类中心点,并输出了每个聚类的中心点坐标。

C++代码:从PLY点云中提取聚类中心点

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

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