使用PCL库遍历最小生成树并可视化结果

以下代码展示了如何使用PCL库遍历最小生成树的结果,并使用PCL可视化工具将结果以边的方式显示出来。

#include <iostream>
#include <pcl/point_types.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/point_cloud_color_handlers.h>
#include <pcl/visualization/point_cloud_handlers.h>
#include <pcl/visualization/point_cloud_geometry_handlers.h>

typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<PointT> PointCloudT;

struct Edge
{
    int src;
    int tgt;
    double weight;
};

void traverseMinimumSpanningTree(const std::vector<Edge>& result, const PointCloudT::Ptr cloud)
{
    std::vector<bool> visited(cloud->size(), false);

    for (const auto& edge : result)
    {
        visited[edge.src] = true;
        visited[edge.tgt] = true;
    }

    pcl::visualization::PCLVisualizer viewer("Minimum Spanning Tree");
    viewer.setBackgroundColor(0.0, 0.0, 0.0);
    viewer.addPointCloud<PointT>(cloud, "cloud");

    for (const auto& edge : result)
    {
        if (visited[edge.src] && visited[edge.tgt])
        {
            PointT src_point = cloud->points[edge.src];
            PointT tgt_point = cloud->points[edge.tgt];

            std::stringstream ss;
            ss << "edge_" << edge.src << "_" << edge.tgt;
            viewer.addLine<PointT, PointT>(src_point, tgt_point, 255, 0, 0, ss.str());
        }
    }

    viewer.spin();
}

int main()
{
    // 加载点云数据
    PointCloudT::Ptr cloud(new PointCloudT);
    pcl::io::loadPCDFile("input_cloud.pcd", *cloud);

    // 创建一个示例结果,包含边
    std::vector<Edge> result;
    result.push_back({0, 1, 0.5});
    result.push_back({1, 2, 0.8});
    result.push_back({2, 3, 1.2});
    result.push_back({3, 4, 1.0});

    // 遍历并可视化最小生成树
    traverseMinimumSpanningTree(result, cloud);

    return 0;
}

说明:

  • 确保已安装并正确配置了PCL库。
  • input_cloud.pcd替换为实际的点云文件名。
  • 代码中的traverseMinimumSpanningTree函数用于遍历最小生成树的结果并在可视化窗口中显示。

如何使用代码:

  1. 将代码保存为.cpp文件,例如mst_visualizer.cpp
  2. 使用编译器编译代码,例如g++ mst_visualizer.cpp -o mst_visualizer -lpcl
  3. 运行编译后的可执行文件,例如./mst_visualizer

代码将加载点云数据并显示最小生成树的可视化结果。

注意:

  • 代码中使用了一个示例结果result,你可以根据自己的需求修改此结果。
  • viewer.spin()会阻塞主线程,直到用户关闭可视化窗口。
  • 可以调整代码以更改线条的颜色、粗细等属性。
  • 可以添加更多功能来展示权重信息或其他最小生成树相关信息。
C++ PCL库遍历最小生成树:可视化结果输出

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

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