PCL中的pcl_visualization库提供了可视化相关的数据结构和组件,包含27个类以及十多个函数,主要是为了将其它模块的算法处理后的结果直观的展现。
简单点云可视化
点云视窗类 CloudViewer 是简单显示点云的可视化工具类,可以让用户尽可能少的代码 查看 点云。
CloudViewer类不能在多线程应用程序中使用
下面介绍其实现方法
Code
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
需要包含的头文件
==============================================================
//声明一个点云 指针
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
//从PCD 中 读取点云
pcl::io::loadPCDFile ("../maize.pcd", *cloud);
声明一个点云 指针 ;从PCD 中 读取点云
==============================================================
/* 创建显示 类 实例 */
pcl::visualization::CloudViewer viewer("Cloud Viewer");
/* 显示点云 */
viewer.showCloud(cloud);
创建pcl 点云 显示 类 实例
显示点云
==============================================================
/* 回调函数执行一次 */
viewer.runOnVisualizationThreadOnce (viewerOneOff);
回调函数执行一次
==============================================================
/* 回调函数 显示每刷新一帧 执行一次 */
viewer.runOnVisualizationThread (viewerPsycho);
回调函数 显示每刷新一帧 执行一次
==============================================================
/*持续显示*/
while (!viewer.wasStopped ())
{
}
==============================================================
void viewerOneOff (pcl::visualization::PCLVisualizer& viewer)
{
/* 设置背景颜色 */
viewer.setBackgroundColor (1.0, 0.5, 1.0);
/*生成一个点 设置为球体 */
pcl::PointXYZ o;
o.x = 1.0;
o.y = 0;
o.z = 0;
/*在一个点上添加 一个 球体*/
viewer.addSphere (o, 0.25, "sphere", 0);
/* 终端打印 仅显示一次 */
std::cout << "i only run once" << std::endl;
}
仅执行一次的回调 函数
在一个点 添加 一个 球体
==============================================================
void viewerPsycho (pcl::visualization::PCLVisualizer& viewer)
{
/*记录 刷新 次数*/
static unsigned count = 0;
//生成 刷新 次数 语句的字符串
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
//除去 text 的id 否则会重复 打印 不出来
viewer.removeShape ("text", 0);
// 将变换的字符添加上去
viewer.addText (ss.str(), 200, 300, "text", 0);
}
回调函数 显示每刷新一帧 执行一次
添加一个 数值 一直 增加 的 字符 串
==============================================================
Result
可以看到一个球体 , 一个变化的字符串 和一个点云。