C++ PCL库遍历最小生成树:可视化结果输出
使用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函数用于遍历最小生成树的结果并在可视化窗口中显示。
如何使用代码:
- 将代码保存为
.cpp文件,例如mst_visualizer.cpp。 - 使用编译器编译代码,例如
g++ mst_visualizer.cpp -o mst_visualizer -lpcl - 运行编译后的可执行文件,例如
./mst_visualizer
代码将加载点云数据并显示最小生成树的可视化结果。
注意:
- 代码中使用了一个示例结果
result,你可以根据自己的需求修改此结果。 viewer.spin()会阻塞主线程,直到用户关闭可视化窗口。- 可以调整代码以更改线条的颜色、粗细等属性。
- 可以添加更多功能来展示权重信息或其他最小生成树相关信息。
原文地址: https://www.cveoy.top/t/topic/fAHA 著作权归作者所有。请勿转载和采集!