• 点云视窗类CloudViewer


    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=149

    点云视窗类CloudViewer是简单显示点云的可视化工具类,可以让用户用尽可能少的代码查看点云。注意:点云视窗类不能应用于多线程应用程序中

    简单点云可视化

    如果用户想用几行代码可视化程序中所对应的地物,可以使用下面的代码:

    #include <pcl/visualization/cloud_viewer.h>
    //...
    void
    foo ()
     {
       pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud;
    //... 为cloud添加对应的场景
    pcl::visualization::CloudViewer viewer ("Simple Cloud Viewer");
       viewer.showCloud (cloud);
    while (!viewer.wasStopped ())
       {
       }
     }

     

    一个更具体的例子

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

    代码

    首先,在PCLPoint Cloud Learning)中国协助发行的书提供光盘的第7章例1文件夹中,打开名为cloud_viewer.cpp的代码文件。同文件夹下可以找到相关的测试点云文件maize.pcd

    解释说明

    下面解析源代码的关键语句,下面一段代码为相关类的头文件声明。

    #include <pcl/visualization/cloud_viewer.h>       //类CloudViewer头文件声明
    #include <iostream>                                 //标准输入输出头文件声明
    #include <pcl/io/io.h>                              //io相关头文件声明
    #include <pcl/io/pcd_io.h>                         //pcd文件读取头文件声明

    下面函数是作为回调函数,在主函数中注册后只执行一次,函数具体实现对可视化对象背景颜色设置、添加一个圆球几何体。

    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)
    {
      staticunsigned 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++;
    }

     下面函数是主函数,首先加载点云文件到点云对象,并初始化可视化对象viewer,注册上面定义的回调函数,执行循环直到收到关闭viewer的消息退出程序。

    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++;
        }
      return0;
    }

    编译并运行程序

    利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件,生成执行文件后,就可以运行了,在cmd中键入命令:

    ...>cloud_viewer.exe

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

    CloudViewer实例运行结果

    敬请关注PCL(Point Cloud Learning)中国更多的点云库PCL(Point Cloud Library)相关官方教程。

    参考文献:

    1.朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN 978-7-5124-0954-5)北京航空航天出版社2012-10

     

  • 相关阅读:
    自定义排序方式
    Ajax 调用(传值)一般处理程序(.ashx)
    把一个文件夹下的所有excel添加到datatable
    list比较交集
    禁用未登录通过连接下载文件
    加密方式
    使用response.write输出excel
    linux安装OpenCV以及windows安装numpy、cv2等python2.7模块
    哈希长度扩展攻击(Hash Length Extension Attack)利用工具hexpand安装使用方法
    yafu安装使用方法以及mismatched parens解决方法
  • 原文地址:https://www.cnblogs.com/flyinggod/p/8598411.html
Copyright © 2020-2023  润新知