pcl学习笔记(一)

pcl的可视化(一)

PCL中visualization模块及类介绍

pcl中pcl_visualization库提供了可视化相关的数据结构和组件,其主要是为了可视化其他模块的算法处理后的结果,可直观的反馈给用户。

 

class pcl::visualization::PCLVisualizer

PCLVisualizer为PCL可视化3D点云的主要类。其内部实现了添加各种3D对象以及交互实现等,比其他类实现的功能更齐全。

实践

1.简单点云可视化

下面是关于如何在可视化线程中运行代码的例子,PCLVisualizer是CloudViewer的后端,但它在自己的线程中运行,若要使用PCLVisualizerl类必须使用调用函数,这样可以避免可视化的并发问题。但是调用时一定要特别注意,以免发生代码混乱的情况,因为调用函数要从可视化线程中进行。

// cloud_viewer.cpp
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
    
int user_data;
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++;
    viewer.removeShape ("text", 0);
    viewer.addText (ss.str(), 200, 300, "text", 0);
    //FIXME: possible race condition here:
    user_data++;
}
    
int 
main ()
{
    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);
    pcl::io::loadPCDFile ("../maize.pcd", *cloud);    //加载点云文件
    pcl::visualization::CloudViewer viewer("Cloud Viewer");    //创建viewer对象
    //showCloud函数是同步的,在此处等待直到渲染显示为止
    viewer.showCloud(cloud);
    //该注册函数在可视化时只调用一次
    viewer.runOnVisualizationThreadOnce (viewerOneOff);
    //该注册函数在渲染输出时每次都调用
    viewer.runOnVisualizationThread (viewerPsycho);
    while (!viewer.wasStopped ())
    {
    //
    user_data++;
    }
    return 0;
}

在CMake中建立工程文件,并生成相应的可执行文件,生成可执行文件就可以运行了

运行结果如下图所示,可以看到一个圆球,玉米的点云,动态刷新的字符串。

 

posted @ 2018-06-03 14:45  feifanren  阅读(1754)  评论(0编辑  收藏  举报