PCL+QT+VS显示点云
2017-03-17 13:08
267 查看
前言
本人在http://blog.csdn.net/wokaowokaowokao12345/article/details/51078495和http://blog.csdn.net/wokaowokaowokao12345/article/details/51314439基础上进行了针对自己出现的BUG稍微修改代码,环境是pcl1.8.0+vs2013+qt5.5.1。Point Cloud Library (PCL)是一个功能强大的开源C++库,如果能够使用好PCL将会对我们在LiDAR数据处理领域的研究产生巨大帮助。LiDAR技术经过几十年的发展,目前国内外关于LiDAR点云数据处理的文献已很丰富,但是依然存在硬件上的发展速度大于软件的发展速度。PCL中的算法基于众多的科研人员和程序爱好者的无私贡献才有今天强大的PCL。
博文中,我将针对如何结合PCL和Qt库做一个可视化点云的程序。这部分内容在PCL官网已有几个例子并且都能够很好的使用,而且UI也是完全由代码设计,这对学习Qt也有一定帮助,但是对于没有任何Qt基础又想入门的同学来说就难免有一定难度。
下面我将对如何使用QT库,运用Qt设计师设计UI,基于PCL读取并显示点云做一个比较完整介绍。
PCL+QT+VS安装配置
本人博客中都有涉及,如果还未安装配置的可以查阅。提示下面新建的工程要配置PCL。
新建工程和编写相关代码
在VS中新建QtApplication工程在主窗口中添加QVtkwidget部件
在UI中添加File菜单和Open动作并编译
添加读取PCD文件的代码
下面直接给出头文件和源文件pclvisualizer.h
#ifndef PCLVISUALIZER_H #define PCLVISUALIZER_H #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); #include <QtWidgets/QMainWindow> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/visualization/pcl_visualizer.h> #include "ui_pclvisualizer.h" class PCLVisualizer : public QMainWindow { Q_OBJECT public: PCLVisualizer(QWidget *parent = 0); ~PCLVisualizer(); private: Ui::PCLVisualizer ui; //点云数据存储 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud; boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer; //初始化vtk部件 void initialVtkWidget(); private slots: //创建打开槽 void onOpen(); }; #endif // PCLVISUALIZER_H
[/code]
pclvisualizer.cpp
#include <QFileDialog> #include <iostream> #include <vtkRenderWindow.h> #include "pclvisualizer.h" PCLVisualizer::PCLVisualizer(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); //初始化 initialVtkWidget(); //连接信号和槽 connect(ui.actionOpen, SIGNAL(triggered()), this, SLOT(onOpen())); } PCLVisualizer::~PCLVisualizer() { } void PCLVisualizer::initialVtkWidget() { cloud.reset(new pcl::PointCloud<pcl::PointXYZ>); viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false)); viewer->addPointCloud(cloud, "cloud"); ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow()); viewer->setupInteractor(ui.qvtkWidget->GetInteractor(), ui.qvtkWidget->GetRenderWindow()); ui.qvtkWidget->update(); } //读取文本型和二进制型点云数据 void PCLVisualizer::onOpen() { //只能打开PCD文件 QString fileName = QFileDialog::getOpenFileName(this, tr("Open PointCloud"), ".", tr("Open PCD files(*.pcd)")); if (!fileName.isEmpty()) { std::string file_name = fileName.toStdString(); //sensor_msgs::PointCloud2 cloud2; pcl::PCLPointCloud2 cloud2; //pcl::PointCloud<Eigen::MatrixXf> cloud2; Eigen::Vector4f origin; Eigen::Quaternionf orientation; int pcd_version; int data_type; unsigned int data_idx; int offset = 0; pcl::PCDReader rd; rd.readHeader(file_name, cloud2, origin, orientation, pcd_version, data_type, data_idx); if (data_type == 0) { pcl::io::loadPCDFile(fileName.toStdString(), *cloud); } else if (data_type == 2) { pcl::PCDReader reader; reader.read<pcl::PointXYZ>(fileName.toStdString(), *cloud); } viewer->updatePointCloud(cloud, "cloud"); viewer->resetCamera(); ui.qvtkWidget->update(); } }
[/code]
重新编译后选择pcd文件打开
显示效果
官方例子编译
官方给的例子是在cmake下构建vs项目,然后用vs编译。现在我将官方给的第一个PCLVisualizer in Qt with cmake,直接用VS进行构建。相关文章推荐
- 使用VS2013_X68;PCL1.7.2;QT5;VTK6.2实现qt显示PCL
- PCL+VS2010+Qt显示点云
- QT显示框架嵌入Vs控制台工程
- VS2008+Qt+助手 智能提示不显示、Qt关键字不高亮的解决办法【已解决】
- VS+Qt+PCL 实战:CloudViewer
- 最近编写过程中遇到的问题总结(在练习qt pcl vs vtk的融合中)
- Qt显示调用vs中的dll
- Qt里显示halcon VS2015
- vs2010调试qt代码 qsting变量值不显示
- QT5.5.0+VS2013(X64)+hidapi的USB继续深究之 QT的汉字显示
- qt5 有中文使用vs编译时失败,以及中文显示乱码
- PCL QT VS 可视化PolygonMesh
- VS2015 + PCL1.8.0 + QT_5.62 + cmake3.82 编译VTK7.1,生成QVTKWidgetPlugin.dll
- qt creator+PCL1.8.0配置,显示pcd文件
- VS调试Qt程序时查看变量显示地址值问题解决
- VS调试Qt的时候只显示QString地址不显示值
- Qt 4.8.6 PCL 1.8.0 VS 2010 联合编译常见错误
- Qt + VS显示无法打开xx文件
- KinectV2 qt pcl 实现点云显示
- QT5.8 VS2013显示中文乱码