【原文:https://segmentfault.com/a/1190000006685118】

可视化:一目了然

如题所示,可视化的重要性不必多说。在点云数据预处理中,要想知道点云的形状需要可视化; 要想了解精简/去噪/简化/压缩 的结果需要可视化; 配准中,对应点对的显示/对应点对的去除结果/配准变化的过程 需要可视化 …

pcl_viewer

Linux 下可直接在命令行输入 pcl_viewr path/to/.pcd或.vtk可直接显示pcl中的点云文件。

pcl_viewr几个常用的命令:
r键: 重现视角。如果读入文件没有在主窗口显示,不妨按下键盘的r键一试。
j键:截图功能。
g键:显示/隐藏 坐标轴。 
鼠标:左键,使图像绕自身旋转; 滚轮, 按住滚轮不松,可移动图像,滚动滚轮,可放大/缩小 图像; 右键,“原地” 放大/缩小。
-/+:-(减号)可缩小点; +(加号),可放大点。
pcl_viewe -bc r,g,b /path/to/.pcd:可改变背景色.
pcl_viewer还可以用来直接显示pfh,fpfh(fast point feature histogram),vfh等直方图。
常用的pcl_viewer 好像就这些,其他未涉及到的功能可通过pcl_viewer /path/.pcd 打开图像,按键盘h(获取帮助)的方式获得.

程序中的可视化

简单可视化类

所谓简单可视化类,是指直接在程序中使用,而且不支持多线程。
必须包含的头文件#include<pcl/visualization/cloud_viewer.h>,声明一个可视化类直接pcl::visualization::CloudViewer viewer ("test");即可,它的意思是说,我创建了一个CloudViewer的可视化类,这个可视化窗口的名字叫做test; 显示用viewer.showCloud(cloud) , 要想让自己所创窗口一直显示,则加上 while (!viewer.wasStopped()){ };即可.

“复杂的”可视化类

以一段程序为例:

    #include <pcl/visualization/pcl_visualizer.h> //包含基本可视化类#include <pcl/visualization/pcl_visualizer.h>//设置键盘交互函数,按下`space`键,某事发生void keyboardEvent(const pcl::visualization::KeyboardEvent &event,void *nothing){if(event.getKeySym() == "space" && event.keyDown())next_iteration = true;}int main (int argc, char **argv){1.  读入点云 source, target2.  处理读入的数据文件boost::shared_ptr<pcl::visualization::PCLVisualizer> view (new pcl::visualization::PCLVisualizer("test")); //创建可视化窗口,名字叫做`test`view->setBackgroundColor(0.0,0,0); //设置背景色为黑色viewer->addCoordinateSystem(1.0); //建立空间直角坐标系//  viewer->setCameraPosition(0,0,200); //设置坐标原点viewer->initCameraParameters();   //初始化相机参数***`*显示的”处理的数据文件“的具体内容*`***view->registerKeyboardCallback(&keyboardEvent,(void*)NULL);  //设置键盘回吊函数while(!viewer->wasStopped()){viewer->spinOnce(100);  //显示boost::this_thread::sleep (boost::posix_time::microseconds (100000));   //随时间}}

在主程序2中,处理显示数据文件包含以下几种:
一. 计算并显示法向量,具体在自己的笔记pcl法向量的计算与显示 点击预览
二. 我的笔记画线与显示 点击预览,可用于配准计算中对应点对的显示,不过用画线的办法很不好.
三. 单纯的自定义的显示点云有如下常用函数:

  1. pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> sources_cloud_color(source,250,0,0); //这句话的意思是:对输入为pcl::PointXYZ类型的点云,着色为红色。其中,source表示真正处理的点云,sources_cloud_color表示处理结果.

  2. view->addPointCloud(source,sources_cloud_color,”sources_cloud_v1”,v1); //将点云source,处理结果sources_cloud_color,添加到视图中,其中,双引号中的sources_cloud_v1,表示该点云的”标签“,我们依然可以称之为”名字“,之所以设置各个处理点云的名字,是为了在后续处理中易于区分; v1表是添加到哪个视图窗口(pcl中可设置多窗口模式)

  3. view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE,3,”sources_cloud_v1”); //设置点云属性. 其中PCL_VISUALIZER_POINT_SIZE表示设置点的大小为3,双引号中”sources_cloud_v1“,就是步骤2中所说的标签。

  4. view->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_OPACITY,1,”sources_cloud_v1”); //主要用来设置标签点云的不透明度,表示对标签名字为”sources_cloud_v1”的标签点云设置不透明度为1,也就是说透明度为0. 默认情况下完全不透明。

四. 显示配准中的对应点对关系.

要想显示点对之间的对应关系, 首先必须计算出对应点对, pcl中对应点对的计算可通过pcl::registration::CorrespondenceEstimation<pcl::PointT,pcl::PointT> correspond_est;计算,计算出对应点对后, source 和 target对应点的索引会存储在vector<int> Apcl::Correspondences A中.要想显示点对的对应关系,只需view->addCorrespondences<pcl::PointXYZ>(source,target,A,"correspond",v1); 其中,pcl::PointXYZ表示所添加对应点对的类型为PointXYZ类型的,参数中的前两个表示目标点云和源点云,A 存储从目标点云到源点云的对应点的索引,”correspond“依然是自定义的标签,v1表示添加到哪个窗口. 
为了使得对应点更加个性化,我们可以对它进行一下”定制“:

  1. view->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH,2,”correspond”); //设置对应点连线的粗细.PCL_VISUALIZER_LINE_WIDTH,表示线操作,线段的宽度为2(提醒一下自己: 线段的宽度最好不要超过自定义的点的大小),”correspond”表示对 对应的标签 做处理.

  2. view->setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR,0,0,1,”correspond”); //设置对应点连线的颜色,范围从0-1之间。

五. 多窗口及人机交互设置.
具体操作即设置请看pcl之ICP实现
六. 如果用pcl的可视化类显示直方图,则可以这样做(以fpfh为例):

#include <pcl/visualization/histogram_visualizer.h> //直方图的可视化
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_plotter.h>
int main (int argc, char **argv)
{....直方图计算....pcl::visualization::PCLHistogramVisualizer view;view.setBackgroundColor(255,0,0);view.addFeatureHistogram<pcl::FPFHSignature33> (*fpfhs,"fpfh",1000);   //对下标为1000的元素可视化//view.spinOnce(10000);  //循环的次数view.spin();  //无限循环return 0;
}

也可以这样显示直方图不过需要在添加头文件#include <pcl/visualization/pcl_plotter.h>

 pcl::visualization::PCLPlotter plotter;
// We need to set the size of the descriptor beforehand.
plotter.addFeatureHistogram(*fpfhs, 300); //设置的很坐标长度,该值越大,则显示的越细致
plotter.plot();

PCL VIEWER相关推荐

  1. PCL:点云特征描述子3D_object_recognition_(descriptors)

    PCL官网:https://pointclouds.org/ 翻译自该网站:http://robotica.unileon.es/index.php/PCL/OpenNI_tutorial_4:_3D ...

  2. PCL点云特征描述与提取(1)

    3D点云特征描述与提取是点云信息处理中最基础也是最关键的一部分,点云的识别.分割,重采样,配准曲面重建等处理大部分算法,都严重依赖特征描述与提取的结果.从尺度上来分,一般分为局部特征的描述和全局特征的 ...

  3. PCL 点云特征描述与提取

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:开着拖拉机唱山歌 链接:https://zhuanlan.zhihu.com/p/1032192 ...

  4. Create a PCL visualizer in Qt with QtDesigner

    这是PCL文档中的例程实现,原文地址:http://pointclouds.org/documentation/tutorials/qt_visualizer.php#more-on-qt-and-p ...

  5. pcl通过积分图来进行法线预测

    首先,我们来看一下什么是积分图,我查了一下wiki,发现它的定义是这样的. A summed area table is a data structure and algorithm for quic ...

  6. PCL——点云特征描述与提取

    法向量估计 /* * @Description: 法向量估计(运⾏耗时2min).:https://www.cnblogs.com/liyao7758258/p/6479255.html * @Aut ...

  7. PCL点云使用贪婪三角化进行曲面重构

    一.PCL点云平滑和法线估计 题目:https://mp.weixin.qq.com/s?__biz=MzIxOTczOTM4NA==&mid=2247486705&idx=1& ...

  8. PCL库官方教程01

    PCL 库概览 介绍 PCL 库的组件,简短说明各个模块的功能及其之间的交互. 概述 PCL 被拆分为多个模块化库.主要模块如下图所示: Filters 滤波器 下图给出了一个去除噪声的例子.由于测量 ...

  9. PCL学习笔记(30)——法线估计normal_estimation

    源码 #include <pcl/io/io.h> #include <pcl/io/pcd_io.h> #include <pcl/features/integral_ ...

最新文章

  1. 一场由FPGA触发的芯片战争
  2. 【Python】 文件和操作文件方法
  3. for命令linux,linux中的for命令
  4. 浅谈LINQ to SQL集成数据库语言优劣
  5. linux命令zip打包,linux下zip命令打包与解包
  6. 开源中国 Android 客户端 v2.8.4 代码开源
  7. 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践
  8. .plist 中各个key的含义
  9. (2.1)【经典木马-冰河木马】详细介绍,原理、使用方法
  10. 密码学——变色龙哈希
  11. 机器学习常用小代码块
  12. 第八讲:期望最大化算法(EM algorithm)
  13. 企业员工生日提醒短信怎么发送
  14. 数据可视化之关联分析
  15. java编译时为什么总找不到文件,javac编译时找不到文件的问题和运行项目找不到指定类问题...
  16. Spring学习笔记(一):初识IOC和DI
  17. ubuntu 查询程序崩溃日志_ubuntu服务器系统崩溃数据成功恢复(一)
  18. 面向对象程序设计(Java)课程设计--坦克大战
  19. adwcleaner_Malwarebytes AdwCleaner
  20. 2016年数学二真题手稿解析

热门文章

  1. 计算机考评员培训,电子商务考评员培训ppt课件
  2. springboot整合mybatis bean注入失败
  3. web/b.s扑克斗地主小小完工
  4. 中台的理解分析与建设
  5. 只有程序员能听懂的笑话,你知道几个?
  6. java 等腰三角形 * 型输出
  7. 论文中有关DEAP数据库介绍,自己写论文时可调用!
  8. 脑补一下etu,波特率
  9. python爬虫:词云分析最热门电影《后来的我们》
  10. 华师计算机调剂深大,提前批院校补录12日12时前网上确认 华师 深大 广大仍有缺额...