目录
一、概述
1.1原理
1.2实现步骤
1.3 应用场景
二、代码实现
2.1关键函数
2.2完整代码
三、实现效果
PCL点云算法汇总及实战案例汇总的目录地址链接:
PCL点云算法与项目实战案例汇总(长期更新)
一、概述
本文将介绍如何使用PCL库在同一个可视化窗口中显示两个点云数据。通过设置不同的颜色和点大小,可以在同一视图中直观地对比和分析两个点云数据。
1.1原理
PCL(Point Cloud Library)提供了强大的点云数据可视化工具,允许在同一个窗口中显示多个点云。通过 pcl::visualization::PCLVisualizer 类,可以轻松地加载多个点云并在同一个窗口中以不同的颜色或样式进行显示。这样可以在同一窗口中对比分析不同点云的特征或变化。
1.2实现步骤
- 创建一个PCL可视化窗口。
- 分别加载两个点云文件。
- 将第一个点云添加到可视化窗口中,并设置其显示属性。
- 将第二个点云添加到可视化窗口中,并为其设置不同的颜色和显示属性。
- 启动可视化窗口,实时显示两个点云数据。
1.3 应用场景
- 点云数据对比:同时显示两个不同的点云数据,便于对比分析它们之间的差异。
- 处理效果验证:可以在同一窗口中显示原始点云和处理后的点云,方便验证处理效果。
- 多视角展示:通过颜色区分,将同一对象的不同视角的点云数据同时显示在一个窗口中。
二、代码实现
2.1关键函数
1.点云文件加载:
-pcl::io::loadPCDFile:用于加载PCD格式的点云文件。
2.点云可视化:
-pcl::visualization::PCLVisualizer:创建一个可视化窗口对象。
-viewer->addPointCloud:将点云数据添加到可视化窗口中。
-pcl::visualization::PointCloudColorHandlerCustom:用于为点云设置自定义颜色。
2.2完整代码
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>int main(int argc, char** argv)
{// 1. 创建PCLVisualizer对象,用于显示点云数据pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0); // 设置背景颜色为黑色// 2. 读取第一个点云数据pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1(new pcl::PointCloud<pcl::PointXYZ>);if (pcl::io::loadPCDFile("1.pcd", *cloud1) == -1) // 加载第一个点云文件{PCL_ERROR("Couldn't read file cloud1.pcd \n");return -1;}// 3. 读取第二个点云数据pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2(new pcl::PointCloud<pcl::PointXYZ>);if (pcl::io::loadPCDFile("C:\\Users\\fh\\Desktop\\PCL_Blog\\cloud_data\\PCD\\bunny.pcd", *cloud2) == -1) // 加载第二个点云文件{PCL_ERROR("Couldn't read file cloud2.pcd \n");return -1;}// 4. 将第一个点云添加到可视化窗口viewer->addPointCloud<pcl::PointXYZ>(cloud1, "cloud1");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud1");// 5. 将第二个点云添加到可视化窗口,并设置不同的颜色pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud2_color(cloud2, 255, 0, 0); // 设置为红色viewer->addPointCloud<pcl::PointXYZ>(cloud2, cloud2_color, "cloud2");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud2");// 6. 启动可视化主循环while (!viewer->wasStopped()){viewer->spinOnce(100); // 让可视化窗口刷新}return 0;
}