点云视窗类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 ()){}}

一个更具体的例子
下面是关于如何在可视化线程中运行代码的例子,PCLVisualizer是CloudViewer的后端,但它在自己的线程中运行,若要使用PCLVisualizer类,必须使用调用函数,这样可以避免可视化的并发问题。但是,调用时一定要特别注意,以免发生代码混乱的情况,因为调用函数要从可视化线程中进行。
代码
首先,在PCL(Point 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所示,可以看到一个圆球、玉米的点云、动态刷新的字符串。
图1 CloudViewer实例运行结果

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

点云视窗类CloudViewer相关推荐

  1. php云打印类,PHP应用:PHP云打印类完整示例

    <PHP应用:PHP云打印类完整示例>要点: 本文介绍了PHP应用:PHP云打印类完整示例,希望对您有用.如果有疑问,可以联系我们. 本文实例讲述了PHP云打印类.分享给大家供大家参考,具 ...

  2. S3(亚马逊云)工具类及使用【java】

    S3(亚马逊云)工具类及使用[java] 文章目录 前言 FileServiceImpl AmazonS3Manager S3Config 配置yml maven包 s3配置与使用 前言 提示:这里是 ...

  3. ICCV 2021 Oral | 基于点云的类级别刚体与带关节物体位姿追踪

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 导  读 本文是计算机视觉领域顶级会议 ICCV入选论文<基于点云的类级别刚体与带关节物体位姿追 ...

  4. php打印机,PHP云打印类完整示例

    本文实例讲述了PHP云打印类.分享给大家供大家参考,具体如下: 一个项目需求要几百台电脑都有打印功能,本来是想用网络打印机的,后来发现没有网络打印机,就自己动手写一个打印类算了. 类实现想法是:先把要 ...

  5. 【实用】氚云通用工具类

    帮助使用氚云的各位快速crud 本方法包括: 1.氚云通用删除工具类 2.氚云通用获取全部参数工具类 3.氚云通用单关键字检索工具类 请注意 使用本工具类需要导入OKHttp3 <!-- htt ...

  6. 华为云--网络类服务实践

    网络类服务实践 华为云 创建网络环境 实验任务: 在上海一区域创建 2 个 VPC:VPC-SH01(2 个子网:subnet-01.subnet-02)和VPC-SH02(subnet-03). 在 ...

  7. PCL之点云可视化--CloudViewer

    点云视窗类CloudViewer是简单的可视化点云工具类,仅用几行代码就可以让用户查看点云:但需要注意的是该类不能用于多线程应用程序中. 代码展示 #include<pcl/point_type ...

  8. PCL学习笔记(3)——openni2_grabber从相机获取点云数据

    源码 #include <pcl/io/openni2_grabber.h> #include <pcl/visualization/cloud_viewer.h> #incl ...

  9. ORB_SLAM2新增稠密建图代码笔记

    接上一篇博客"ORB_SLAM2+kinect稠密建图实战项目总结" ORB_SLAM2+kinect稠密建图实战项目总结_好好仔仔的博客-CSDN博客 本篇在此基础上对整个项目的 ...

最新文章

  1. java8 时间加一秒_年货买瓜子有讲究!这些加了“料”的瓜子不安全!
  2. [bzoj2300] [HAOI2011]防线修建
  3. Android--Fragment 实现懒加载和不重复加载
  4. xcode armv6 armv7 armv7s arm64
  5. AntData.ORM框架 之 读写分离
  6. N的倍数(抽屉原理)
  7. linux中变量的使用
  8. python将小数转为分数_Python分数
  9. PHP_SELF,SCRIPT_NAME,SCRIPT_FILENAME,PATH_INFO,REQUEST_URI的区别
  10. 正则判断手机号地区_国内外手机号码正则表达式汇总
  11. 用户调研---问卷调查
  12. 公告栏文本横向循环滚动
  13. N63043-郝子轩-第二周
  14. 应付款与分工之利读后感
  15. JAVA文件搜索过程中如何得到各种文件内容(office文件,PDF,邮件,mht,思维导图等)
  16. 3.1 jmeter 响应断言
  17. mysql设计收藏与标签
  18. 流星汇聚:跨境电商几大主流电商平台势均力敌,卖家如何选择?
  19. axios修改服务器地址,axios 生产环境和开发环境 ip 切换(修改文件配置)
  20. RabbitMQ图文详解 | MQ_SpringAMQP | 系统性学习 | 无知的我费曼笔记

热门文章

  1. Android Mms专题之:Mms概览介绍
  2. shell运行python
  3. 软件测试工程师笔试面试题带答案(一)
  4. Grad-CAM论文总结
  5. java转人工智能_[转]人工智能缩略语大全
  6. 一款视频剪辑软件--爱剪辑
  7. Unity数据持久化——Json
  8. 麻省理工计算机专业毕业就业,中国版的麻省理工大学,工科实力与清华比肩,备受业界认可...
  9. linux驱动之字符设备
  10. 一个表字段做为表名_在冬天,安心做一个简单知足的人 |为你读诗