原文链接:The CloudViewer — Point Cloud Library 0.0 documentation

CloudViewer类

CloudViewer类是一个简单直接,对简单点云进行可视化的类,仅用少量的代码就可实现点云的可视化。

注意:CloudViewer类不能用于多线程应用当中。如果要在多线程中使用可视化,可以使用 PCLVisualizer

简单点云的可视化

如果想在项目中用几行代码可视化点云,可以使用下面的模板:

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

完整的案例

代码:

#include<pcl/visualization/cloud_viewer.h>
#include<iostream>
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
using namespace std;
void
foo()
{pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud;pcl::visualization::CloudViewer viewer("Simple Cloud Viewer");viewer.showCloud(cloud);while (!viewer.wasStopped()){}
}int user_data;//回调函数,在主函数中注册后只执行一次
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{//设置窗口背景颜色viewer.setBackgroundColor(1.0, 0.5, 1.0);//粉色//添加一个圆球几何体pcl::PointXYZ o;//xyz 为坐标位置o.x = 1.0;o.y = 0;o.z = 0;//添加圆球几何图像viewer.addSphere(o, 0.25, "sphere", 0);cout << "i only run once" << endl;
}
//也是回调函数,在主函数中注册后,每帧显示都执行一次
//具体功能:在可视化对象中添加一个刷新显示的字符串
void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{static unsigned count = 0;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::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::io::loadPCDFile("maize.pcd", *cloud);//创建viewer对象pcl::visualization::CloudViewer viewer("Cloud Viewer");//传入的字符串为窗口的名字//showCloud是同步的,在此处等待直到渲染显示为止viewer.showCloud(cloud);//该注册函数在渲染输出时只调用一次viewer.runOnVisualizationThreadOnce(viewerOneOff);//该注册函数在渲染输出时每次都调用viewer.runOnVisualizationThread(viewerPsycho);while (!viewer.wasStopped()){//在此处可以添加其他处理user_data++;}return 0;
}

 该程序的主要功能为可视化了maize.pcd文件中的点云,该点云为一颗植物,同时设置了可视化窗口的一些属性,比如背景和窗口名字等,同时往可视化窗口内条件了一个三维圆球和一行字符串,可以设置它们所在的位置。

显示结果如下:

注意事项:

  1. 代码中所使用的的pcd文件链接:CloudViewer-maize.pcd_CloudViewer进行可视化的代码-讲义文档类资源-CSDN下载,此pcd文件只有XYZ字段,所以应创建PointXYZ类型的点云,在《点云库PCL从入门到精通》一书中,书中代码与其给出的开源代码并不一致,且其给出的pcd文件格式为XYZ,但无论是书中代码还是源码都写的XYZRGBA格式,可见此书的质量堪忧!书中代码尚未运行验证,读者应谨慎阅读此书!
  2. 应该使用Cmake编译此代码,并在cmd命令行中运行此程序。本人直接使用VS装载pcl,直接运行此代码会出现库函数缺失等意想不到的情况发生

直接在VS中编写会出错:

应该按照教程:Win10下使用Cmake编译PCL工程文件测试_DayDayUp-CSDN博客

在命令行中运行程序:

PCL教程-使用CloudViewer类实现简单点云可视化相关推荐

  1. PCL教程-点云滤波之体素滤波器(下采样)

    原文链接:Downsampling a PointCloud using a VoxelGrid filter 点云文件下载: table_scene_lms400.pcd 目录 原理 程序代码 PC ...

  2. [PCL教程] PCL漫游之Filter、Features

    目录 1 概述 2 滤波 Filters 2.1 PassThrough 截取点云 2.2 VoxelGrid 降采样 2.3 StatisticalOutlierRemoval去离群点 2.4 Pr ...

  3. [PCL教程]PCL漫游之Registration,Visualization

    目录 9 配准 Registration 9.1 配准基础 9.2 迭代最近点 ICP 9.2 递增地配准点云 9.3 正态分布变换 NDT 9.3.1 基本原理 9.3.2 代码解读 9.4 交互式 ...

  4. PCL教程-点云配准之成对逐步配准(两两配准)

    原文链接:How to incrementally register pairs of cloudshttps://pcl.readthedocs.io/projects/tutorials/en/l ...

  5. php中des加密cbc模式,php中加密解密DES类的简单使用方法示例

    本文实例讲述了php中加密解密DES类的简单使用方法.分享给大家供大家参考,具体如下: 在平时的开发工作中,我们经常会对关键字符进行加密,可能为了安全 也可能为了规范,所以要正确使用DES加密解密 代 ...

  6. php db类 应用实例,PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例

    本文实例讲述了PHP封装类似thinkphp连贯操作数据库Db类与简单应用.分享给大家供大家参考,具体如下: header("Content-Type:text/html;charset=u ...

  7. android远程打电话,Android打电话功能 Android实战教程第三篇之简单实现拨打电话功能...

    想了解Android实战教程第三篇之简单实现拨打电话功能的相关内容吗,杨道龙在本文为您仔细讲解Android打电话功能的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Android拨打电话 ...

  8. 如何配置Thymeleaf教程,及Thymeleaf的简单使用教程【一篇足够入门】

    如何配置Thymeleaf教程,及Thymeleaf的简单使用教程[一篇足够入门] 第一步[进行maven项目的建立(maven的建立前面文章中有提过),建立完之后在pom.xml中进行相关包的导入跟 ...

  9. PCL教程指南-估计点云法向量

    PCL教程指南-Estimating Surface Normals in a PointCloud(估计点云法向量) 官方原文档 点云法向指每个点的法向量,它是基于各点所在邻域范围内估计而出,常用方 ...

  10. python爬虫入门教程(二):开始一个简单的爬虫

    2019/10/28更新 使用Python3,而不再是Python2 转载请注明出处:https://blog.csdn.net/aaronjny/article/details/77945329 爬 ...

最新文章

  1. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array
  2. 数据库元数据数据字典查询_6_列出给定表的外键引用
  3. 深度学习之基于LeNet-5实现cifar10的识别
  4. 多数公司容易犯的5个大数据错误
  5. 暴露的全局方法_期末考试快到了,这4种错误的考试复习方法,越复习越差劲!...
  6. Delphi:第一个hello world程序
  7. oracle 错误码1438,一次ora-01438错误的处理
  8. Wolfram Mathematica 13 for Mac(功能广泛的科学计算软件)中文版
  9. Angular2 小贴士 Name
  10. 检测相机视野中的物体运动并用Mask显示
  11. 55本《大数据浪潮之巅:新技术商业制胜之道》,包邮!
  12. 十大排序算法(动画图解)
  13. 在win10下,xilinx公司FPGA下载器上,指示灯不亮,设备管理器中驱动显示正常,下载器无法识别到期间
  14. 【转】和老外聊天、发邮件常用英语缩写
  15. HDU - 4567 Brilliant Programmers Show 2013长沙邀请赛
  16. §1 打开百度地图的大门——注册百度地图开发者账户与创建应用
  17. AM335x Linux调试1--MLO中打印寄存器值
  18. 谷歌html弹出ie页面,HTML用JS识别浏览器,IE内核则调用谷歌打开指定链接
  19. Windows配置SSHKey到GItHub
  20. 痞子衡嵌入式:在i.MXRT1060-EVK上利用memtester程序给SDRAM做压力测试

热门文章

  1. npm 如何处理依赖与依赖冲突
  2. Jmeter应用-接口测试
  3. Jenkins 身份验证及授权简介
  4. (转)Java面试笔试题大汇总(最全+详细答案)
  5. 【论文笔记】移动机器人视觉 SLAM 研究综述
  6. C++核心准则边译边学-不必惊慌!
  7. 组合按键的软件设计(c语言)
  8. centos文件系统,日志以及文件误删恢复
  9. 1区SCI潜力刊,中科院分区即将更新,有望冲击2区
  10. 利用redis生成订单号