linux qt pcl,PCL+Qt+VS可视化点云

前言

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和编写相关代码

在VS中新建QtApplicationproject

3d523c6b1c71b033c7f693fee2a6d69c.png

在主窗体中加入QVtkwidget部件

cc42504588f2c04489749529b55595a6.png

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

8b067f5547fc8eff8b2035c85bdb7707.png

加入读取PCD文件的代码

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

1. pclvisualizer.h

#ifndef PCLVISUALIZER_H

#define PCLVISUALIZER_H

#include

#include

#include

#include

#include "ui_pclvisualizer.h"

class PCLVisualizer : public QMainWindow

{

Q_OBJECT

public:

PCLVisualizer(QWidget *parent = 0, Qt::WFlags flags = 0);

~PCLVisualizer();

private:

Ui::PCLVisualizerClass ui;

//点云数据存储

pcl::PointCloud<:pointxyz>::Ptr cloud;

boost::shared_ptr<:visualization::pclvisualizer> viewer;

//初始化vtk部件

void initialVtkWidget();

private slots:

//创建打开槽

void onOpen();

};

#endif // PCLVISUALIZER_H

pclvisualizer.cpp

#include

#include

#include "pclvisualizer.h"

PCLVisualizer::PCLVisualizer(QWidget *parent, Qt::WFlags flags)

: QMainWindow(parent, flags)

{

ui.setupUi(this);

//初始化

initialVtkWidget();

//连接信号和槽

connect(ui.actionOpen,SIGNAL(triggered()),this,SLOT(onOpen()));

}

PCLVisualizer::~PCLVisualizer()

{

}

//

void PCLVisualizer::initialVtkWidget()

{

cloud.reset (new pcl::PointCloud<: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::PointCloud<: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<:pointxyz> (fileName.toStdString(), *cloud);

}

viewer->updatePointCloud (cloud, "cloud");

viewer->resetCamera ();

ui.qvtkWidget->update();

}

}

又一次编译后选择pcd文件打开

82ee47ea5f9a6794a16d7219e158419a.png

显示效果

910a1c5368c8f41646d3f047f701abaf.png

官方样例编译

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

a20a0d9e3b3b7c73305a1d6a5deeaff7.png

更加复杂的样例

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

134f0aafa67199be91538068e30a9e1c.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值