• 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中建立工程文件,并生成相应的可执行文件,生成可执行文件就可以运行了

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

  • 相关阅读:
    cron表达式详解(转载)
    Swagger 3.0使用教程(转载)
    springboot整合shiro-对密码进行MD5并加盐处理(十五)(转载)
    redis排序
    引用和指针的区别?
    测试策略
    主键、外键的作用,索引的优点与不足?
    您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
    UI测试测什么
    数据库,数据库管理系统,数据库系统三者的区别和练习?
  • 原文地址:https://www.cnblogs.com/feifanrensheng/p/9129208.html
Copyright © 2020-2023  润新知