要基于PCL库可视化vector<pcl::PointIndices>表示的点云数据,需要进行以下步骤:

  1. 创建一个PCL可视化对象,用于显示点云数据。
pcl::visualization::PCLVisualizer viewer("Point Cloud Viewer");
  1. 设置点云的颜色和尺寸。
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud");
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1.0, 0.0, 0.0, "cloud");
  1. 遍历vector<pcl::PointIndices>,获取每个点云簇的索引,并将其可视化。
for (int i = 0; i < all_cluster_indices.size(); i++) {
    pcl::PointIndices cluster_indices = all_cluster_indices[i];
    pcl::PointCloud<pcl::PointXYZ>::Ptr cluster_cloud(new pcl::PointCloud<pcl::PointXYZ>);
    
    for (int j = 0; j < cluster_indices.indices.size(); j++) {
        int index = cluster_indices.indices[j];
        pcl::PointXYZ point = cloud->points[index];
        cluster_cloud->points.push_back(point);
    }
    
    // 为每个点云簇创建一个唯一的ID,并将其添加到可视化对象中进行显示
    std::stringstream cluster_id;
    cluster_id << "cluster_" << i;
    viewer.addPointCloud(cluster_cloud, cluster_id.str());
}
  1. 设置点云的视角和交互方式。
viewer.setCameraPosition(0, 0, -2, 0, -1, 0, 0);
viewer.setBackgroundColor(0.0, 0.0, 0.0);
viewer.addCoordinateSystem(0.1);
viewer.initCameraParameters();
viewer.spin();

完整的示例代码如下所示:

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>

int main() {
    // 加载点云数据
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile<pcl::PointXYZ>("input.pcd", *cloud);

    // 定义点云簇的索引
    std::vector<pcl::PointIndices> all_cluster_indices;

    // 创建PCL可视化对象
    pcl::visualization::PCLVisualizer viewer("Point Cloud Viewer");

    // 设置点云的颜色和尺寸
    viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud");
    viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1.0, 0.0, 0.0, "cloud");

    // 遍历点云簇的索引并可视化点云数据
    for (int i = 0; i < all_cluster_indices.size(); i++) {
        pcl::PointIndices cluster_indices = all_cluster_indices[i];
        pcl::PointCloud<pcl::PointXYZ>::Ptr cluster_cloud(new pcl::PointCloud<pcl::PointXYZ>);

        for (int j = 0; j < cluster_indices.indices.size(); j++) {
            int index = cluster_indices.indices[j];
            pcl::PointXYZ point = cloud->points[index];
            cluster_cloud->points.push_back(point);
        }

        // 为每个点云簇创建一个唯一的ID,并将其添加到可视化对象中进行显示
        std::stringstream cluster_id;
        cluster_id << "cluster_" << i;
        viewer.addPointCloud(cluster_cloud, cluster_id.str());
    }

    // 设置点云的视角和交互方式
    viewer.setCameraPosition(0, 0, -2, 0, -1, 0, 0);
    viewer.setBackgroundColor(0.0, 0.0, 0.0);
    viewer.addCoordinateSystem(0.1);
    viewer.initCameraParameters();
    viewer.spin();

    return 0;
}

请注意,上述代码中的input.pcd是待加载的点云数据文件,你需要将其替换为你自己的点云文件路径。另外,你还需要根据自己的需求调整点云的颜色、尺寸、视角等参数

基于pcl库可视化vectorpclPointIndices all_cluster_indices表示的点云数据

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

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