前言

Point Cloud Library (PCL)是一个功能强大的开源C++库,假设可以使用好PCL将会对我们在LiDAR数据处理领域的研究产生巨大帮助。LiDAR技术经过几十年的发展。眼下国内外关于LiDAR点云数据处理的文献已非常丰富。可是依旧存在硬件上的发展速度大于软件的发展速度。

PCL中的算法基于众多的科研人员和程序爱好者的无私贡献才有今天强大的PCL。

博文中,我将针对怎样结合PCL和Qt库做一个可视化点云的程序。这部分内容在PCL官网已有几个样例并且都可以非常好的使用,并且UI也是全然由代码设计,这对学习Qt也有一定帮助,可是对于没有不论什么Qt基础又想入门的同学来说就难免有一定难度。

以下我将对怎样使用QT库。运用Qt设计师设计UI。基于PCL读取并显示点云做一个比較完整介绍。

PCL+QT+VS安装配置

本人博客中都有涉及,假设还未安装配置的可以查阅。

提示以下新建的project要配置PCL。

新建project和编写相关代码

  1. 在VS中新建QtApplicationproject

  2. 在主窗体中加入QVtkwidget部件

  3. 在UI中加入File菜单和Open动作并编译

加入读取PCD文件的代码

以下直接给出头文件和源文件

1. pclvisualizer.h

  1. #ifndef PCLVISUALIZER_H
  2. #define PCLVISUALIZER_H
  3. #include <QtGui/QMainWindow>
  4. #include <pcl/io/pcd_io.h>
  5. #include <pcl/point_types.h>
  6. #include <pcl/visualization/pcl_visualizer.h>
  7. #include "ui_pclvisualizer.h"
  8. class PCLVisualizer : public QMainWindow
  9. {
  10. Q_OBJECT
  11. public:
  12. PCLVisualizer(QWidget *parent = 0, Qt::WFlags flags = 0);
  13. ~PCLVisualizer();
  14. private:
  15. Ui::PCLVisualizerClass ui;
  16. //点云数据存储
  17. pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
  18. boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
  19. //初始化vtk部件
  20. void initialVtkWidget();
  21. private slots:
  22. //创建打开槽
  23. void onOpen();
  24. };
  25. #endif // PCLVISUALIZER_H
  1. pclvisualizer.cpp
  1. #include <QFileDialog>
  2. #include <iostream>
  3. #include "pclvisualizer.h"
  4. PCLVisualizer::PCLVisualizer(QWidget *parent, Qt::WFlags flags)
  5. : QMainWindow(parent, flags)
  6. {
  7. ui.setupUi(this);
  8. //初始化
  9. initialVtkWidget();
  10. //连接信号和槽
  11. connect(ui.actionOpen,SIGNAL(triggered()),this,SLOT(onOpen()));
  12. }
  13. PCLVisualizer::~PCLVisualizer()
  14. {
  15. }
  16. //
  17. void PCLVisualizer::initialVtkWidget()
  18. {
  19. cloud.reset (new pcl::PointCloud<pcl::PointXYZ>);
  20. viewer.reset (new pcl::visualization::PCLVisualizer ("viewer", false));
  21. viewer->addPointCloud (cloud, "cloud");
  22. ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow ());
  23. viewer->setupInteractor (ui.qvtkWidget->GetInteractor (), ui.qvtkWidget->GetRenderWindow ());
  24. ui.qvtkWidget->update ();
  25. }
  26. //读取文本型和二进制型点云数据
  27. void PCLVisualizer::onOpen()
  28. {
  29. //仅仅能打开PCD文件
  30. QString fileName = QFileDialog::getOpenFileName(this,
  31. tr("Open PointCloud"), ".",
  32. tr("Open PCD files(*.pcd)"));
  33. if (!fileName.isEmpty())
  34. {
  35. std::string file_name=fileName.toStdString();
  36. sensor_msgs::PointCloud2 cloud2;
  37. //pcl::PointCloud<Eigen::MatrixXf> cloud2;
  38. Eigen::Vector4f origin;
  39. Eigen::Quaternionf orientation;
  40. int pcd_version;
  41. int data_type;
  42. unsigned int data_idx;
  43. int offset = 0;
  44. pcl::PCDReader rd;
  45. rd.readHeader(file_name,cloud2,origin,orientation,pcd_version,data_type,data_idx);
  46. if (data_type==0)
  47. {
  48. pcl::io::loadPCDFile(fileName.toStdString(),*cloud);
  49. }else if (data_type==2)
  50. {
  51. pcl::PCDReader reader;
  52. reader.read<pcl::PointXYZ> (fileName.toStdString(), *cloud);
  53. }
  54. viewer->updatePointCloud (cloud, "cloud");
  55. viewer->resetCamera ();
  56. ui.qvtkWidget->update();
  57. }
  58. }
  1. 又一次编译后选择pcd文件打开



    显示效果

官方样例编译

官方给的样例是在cmake下构建vs项目。然后用vs编译。如今我将官方给的第一个PCLVisualizer in Qt with cmake,直接用VS进行构建,并将完整project上传至百度云盘,假设有须要的可以进行下载。

更加复杂的样例

这款软件是基于Qt、PCL、VTK、GDAL、LASLib、Liblas、Tiff、GeoTiff、opencv等库开发,是对笔者研究生阶段有关LiDAR学习研究的一个总结。今后若挣得导师允许。会逐渐将一些算法以博文的形式和大家分享。

PCL+Qt+VS可视化点云的更多相关文章

  1. [Part 4] 在Windows 10上源码编译PCL 1.8.1支持VTK和QT,可视化三维点云

    本文首发于个人博客https://kezunlin.me/post/2d809f92/,欢迎阅读! Part-4: Compile pcl with vtk qt5 support from sour ...

  2. 在PCL中如何实现点云压缩(1)

    点云由庞大的数据集组成,这些数据集通过距离.颜色.法线等附加信息来描述空间三维点.此外,点云能以非常高的速率被创建出来,因此需要占用相当大的存储资源,一旦点云需要存储或者通过速率受限制的通信信道进行传 ...

  3. PCL—低层次视觉—点云分割(邻近信息)

    分割给人最直观的影响大概就是邻居和我不一样.比如某条界线这边是中华文明,界线那边是西方文,最简单的分割方式就是在边界上找些居民问:"小伙子,你到底能不能上油管啊?”.然后把能上油管的居民坐标 ...

  4. PCL—低层次视觉—点云分割(RanSaC)

    点云分割 点云分割可谓点云处理的精髓,也是三维图像相对二维图像最大优势的体现.不过多插一句,自Niloy J Mitra教授的Global contrast based salient region ...

  5. 数据可视化——阿里云解决方案DataV

    数据可视化——阿里云解决方案DataV https://help.aliyun.com/document_detail/53844.html?spm=a2c4g.11186623.6.579.37fd ...

  6. PCL中的OpenNI点云获取框架(OpenNI Grabber Framework in PCL)

    从PCL 1.0开始,PCL(三维点云处理库Point Cloud Library)提供了一个通用采集接口,这样可以方便地连接到不同的设备及其驱动.文件格式和其他数据源.PCL集成的第一个数据获取驱动 ...

  7. PCL 不同类型的点云之间进行类型转换

    PCL 不同类型的点云之间进行类型转换 可以使用PCL里面现成的函数pcl::copyPointCloud(): #include <pcl/common/impl/io.h> pcl:: ...

  8. 第15.10节 PyQt(Python+Qt)入门学习:Qt Designer可视化设计界面组件与QWidget类相关的组件属性详解

    PyQt学习有阵子了,对章节的骨架基本考虑好了,准备本节就写组件的属性的,结果一是日常工作繁忙,经常晚上还要加班,二是Qt的组件属性很多,只能逐一学习.研究和整理,花的时间有点长,不过终于将可视化设计 ...

  9. 用QT制作3D点云显示器——QtDataVisualization

    因为QT的三维显示模块QtDataVisualization已经对个人开发免费开放了,所以在制作点云,地图,表格之类的东西的时候,其实我们都不需要使用QtCharts或者QOpenGL模块了.直接使用 ...

随机推荐

  1. JWT—JSON Web Token - 理解JWT网络间应用用户安全认证交互设计

    原文地址:http://blog.leapoahead.com/2015/09/06/understanding-jwt/ 官网地址:https://jwt.io/ JSON Web Token(JW ...

  2. HDU 1009:FatMouse&#39; Trade(简单贪心)

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. Atitit  hre框架v5 新特性  HREv5

    Atitit  hre框架v5 新特性  HREv5 1. V5新特性 apiurl2="/wrmiServlet";1 2. V1 新特性1 3. V2 新特性 添加php版1 ...

  4. iOS Socket/Tcp编程 GCDAsyncSocket的实战(带回调)

    很多同学一听到Socket TCP UDP 这几个字眼感觉特别害怕,很怕在工作当中使用,因为他们太底层了.下面我把我在工作中使用Socket类库GCDAsyncSocket进行一次实战 文章中只适用于 ...

  5. 机器人的运动范围 剑指offer66题

    include "stdafx.h" #include<vector> #include<algorithm> #include<string> ...

  6. imx6背光驱动调试

    1.内核配置pwm背光驱动make menuconfig:Device Driver ---> Graphics support ---> [*] Backlight & LCD ...

  7. UVa 12563 劲歌金曲 刘汝佳第二版例题9-5;

    Problem J Jin Ge Jin Qu [h]ao (If you smiled when you see the title, this problem is for you ^_^) Fo ...

  8. OC 内存管理-02 ARC 内存管理

    ARC 管理 概念: ARC简单,不用程序员在去管理内存 1.强指针 Strong[] :只要有强指针指向一个对象,那么系统就不会回收该对象 2.弱指针 weak :只要没有强指针指向对象,系统立即回 ...

  9. Eclipse 浏览(Navigate)菜单

    浏览 Eclipse 工作空间 浏览(Navigate)菜单提供了多个菜单可以让你快速定位到指定资源. 上图中 Open Type, Open Type in Hierarchy 和 Open Res ...

  10. Python 爬虫实战5 模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 python模拟登录淘宝网页 获取登录用户的所有订单详情 ...