参考
- (QT配置pcl)PCL1.12.1+QT5.15.2+vs2019+cmake3.22.4+vtk9.1.0
- visual studio2019+Qt5.15.2+PCL1.12.1+vtk9.1.0+cmake3.22.2
本博客用到的所有资源
- 版本一览:Visual Studio 2019 + Qt 5.15.2 + PCL 1.12.1 + VTK 9.1.0
- https://pan.baidu.com/s/1xW7xCdR5QzgS1_d1NeIZpQ?pwd=0000
1. Visual Studio 2019 安装
Visual Studio 2019 官方下载地址
- 双击下载好的 vs_enterprise__663473144.1633489885.exe 文件,勾选下述选项安装即可
2. Qt 5.15.2 安装
2.1 Qt 在线安装
-
Qt 在线安装文件下载:qt-unified-windows-x86-4.3.0-1-online.exe
-
双击下载好的 qt-unified-windows-x86-4.3.0-1-online.exe,自行注册并登录 Qt 账户,在选择组件界面,勾选下图所示组件,然后一直点击下一步安装即可
2.2 Qt-VS 2019 插件安装
-
Qt-Visual Studio 2019 插件下载:qt-vsaddin-msvc2019-2.8.1-rev.06.vsix
-
双击下载好的 qt-vsaddin-msvc2019-2.8.1-rev.06.vsix 直接安装即可
-
在 Visual Studio 2019 中添加 Qt 路径,打开 Visual Studio 2019 新建一个控制台项目,点击下图一所示选项,在下图二中 Version 和 Path 中添加所示内容(具体内容根据自己的情况修改,图示 D:\Qt6 是本人新建文件夹错了,实则安装的是 Qt5)
- Visual Studio 2019 创建 Qt 项目测试(下图三:将 .ui 文件打开方式设置为 Qt 默认打开)
3. PCL 1.12.1 安装
-
双击下载的 PCL-1.12.1-AllInOne-msvc2019-win64.exe 文件安装即可,切记安装路径不能有中文和空格,本文安装路径为 D:\PCL1.12.1,建议与本文一致,安装完得到下图所示(将网盘中的 pcl1.12.1.pri 文件复制到该目录)
-
安装 OpenNI2,先双击 remove,再双击安装
-
将网盘中的 pcl-1.12.1-pdb-msvc2019-win64.zip 文件解压后的内容全选复制到 D:\PCL1.12.1\bin 目录下
-
path 环境变量设置:添加下图红框所示环境变量,如果不放心,可参考这篇博客添加更多环境变量
4. CMake 3.22.4 安装
- 双击下载的 cmake-3.22.4-windows-x86_64.msi 直接安装即可,安装步骤简单此处不赘述
5. VTK 9.1.0 安装
5.1 VTK 简介
- VTK(Visualization Toolkit,可视化工具包)是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库
- VTK 是一个用于可视化和图形处理的强大库,它提供了丰富的功能和算法,可用于创建和渲染 2D 和 3D 图形,并进行各种可视化和图形处理操作,VTK 库可以用于处理各种类型的数据,包括点云数据
- PCL 是一个专门用于处理点云数据的库,它提供了一组算法和工具,可用于点云的采集、过滤、配准、分割、特征提取等任务,PCL 库的目标是提供一个全面而高效的点云处理解决方案
- 在 PCL 中,有一个模块(pcl_visualization)使用了 VTK 库的功能,用于可视化点云数据和结果,通过使用 VTK 库,PCL 可以提供强大的点云可视化功能
VTK 提供了强大的可视化和图形处理功能,而 PCL 则专注于点云数据的处理,但在某些功能上使用了 VTK 库来实现点云的可视化
5.2 VTK 安装方法一:直接替换
- 下载网盘中编译好的 VTK.rar 文件,解压后直接替换 D:\PCL1.12.1\3rdParty 目录下的 VTK 文件夹即可
5.3 VTK 安装方法二:自行编译
- 参考视频:QT配置pcl
6. Qt PCL 测试案例
-
打开 Qt 5.15.2 新建 Qt Widgets 项目 show(qmake),选择 Qt 5.15.2 MSVC2019 64bit 编译套件
-
在 show.pro 文件添加下行代码
QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets // 添加下行代码(根据自己安装目录进行修改) include(D:/PCL1.12.1/pcl1.12.1.pri)
-
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QWindow> #include <QHBoxLayout> #include <vtkGenericOpenGLRenderWindow.h> #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/visualization/pcl_visualizer.h> typedef pcl::PointXYZ PointT; typedef pcl::PointCloud<PointT> PointCloudT; typedef pcl::visualization::PCLVisualizer PCLViewer; typedef std::shared_ptr<PointCloudT> PointCloudPtr; QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; PointCloudPtr cloudptr; PCLViewer::Ptr cloud_viewer; }; #endif // MAINWINDOW_H
-
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { setWindowTitle("PCL Test"); ui->setupUi(this); // 创建 PCLViewer 对象并设置窗口标题 cloud_viewer.reset(new PCLViewer("Viewer")); cloud_viewer->setShowFPS(false); // 将 cloud_viewer 的渲染窗口嵌入到 QWidget 中 auto viewerWinId = QWindow::fromWinId((WId)cloud_viewer->getRenderWindow()->GetGenericWindowId()); QWidget *widget = QWidget::createWindowContainer(viewerWinId, nullptr); // 创建 QVBoxLayout 对象并将 QWidget 添加到其中 QVBoxLayout* mainLayout = new QVBoxLayout; mainLayout->addWidget(widget); centralWidget()->setLayout(mainLayout); // 创建 PointCloudT 智能指针并加载点云数据 // office.pcd 点云文件在网盘中已提供 cloudptr.reset(new PointCloudT); pcl::io::loadPCDFile("D:/office.pcd", *cloudptr); // 设置颜色处理器,将点云数据添加到 cloud_viewer 中 const std::string axis ="z"; pcl::visualization::PointCloudColorHandlerGenericField<PointT> color_handler(cloudptr, axis); cloud_viewer->addPointCloud(cloudptr, color_handler, "cloud"); } MainWindow::~MainWindow() { delete ui; }