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

可以看到一个球体 , 一个变化的字符串 和一个点云。