Qt+PCL手把手教材(第4讲)——Win11环境(VTK9.1.0+Qt5.15.2)编译QVTK组件以及Linux上安装PCL库

1、 Win11环境(VTK9.1.0+Qt5.15.2)编译

PCL库中虽然有VKT库,但是并不支持Qt中GUI的相关功能组件,以及Qt+PCL基本架构中的相关功能,因此需要重新自己编译VTK+Qt,以及编译后的VTK库和PCL库又进一步自编译,用于PCL库中的可视化部分,才能进行Qt+PCL应用开发,接下来先编译Qt+VTK。

1.1、准备工作

1. 安装工具与依赖
  • CMake:建议使用 3.21 或更高版本(下载地址)或者提供的下载地址
  • Visual Studio 2019:安装时务必勾选 “C++桌面开发” 工作负载
  • Qt 5.15.2:使用 MSVC 2019 构建版本(与你 VS 匹配),前面对应系列教材以及有相关内容。
2. 获取 VTK 源码

由于PCL1.12.1库中对应的VTK库是9.1.0,因此下载对应的版本,避免因为编译带来版本不对应的问题。
获取方式:


3. 下载完成的VTK库文件如下

在这里插入图片描述

1.2、使用 CMake 配置 VTK

1. 启动 CMake GUI
  • Where is the source code: 填入 VTK 源码路径,如:F:/Develop/VTK-9.1.0/VTK-9.1.0
  • Where to build the binaries: 填一个新的 build 目录(比如:F:/Develop/VTK-9.1.0/build),最终的结果如下图。
    在这里插入图片描述
    在这里插入图片描述
2. 点击 Configure
  • 选择 Visual Studio 16 2019
  • 平台选择 x64
  • 第一次配置后会出现很多选项,勾选以下重要项:
3. 勾选与 Qt 相关的选项(如需集成 Qt)
  • VTK_GROUP_ENABLE_Qt: 选择 YES
  • VTK_MODULE_ENABLE_VTK_GUISupportQt: YES
  • VTK_MODULE_ENABLE_VTK_RenderingQt: YES
  • VTK_QT_VERSION: 填 5
  • CMAKE_PREFIX_PATH: 添加 Qt 的安装路径,比如:

D:\VS19_3rdParty\Qt\5.15.2\msvc2019_64

效果图如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/acc42446a93a4c5caefa3680d19bfcdb.png)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/83f45095ee30404fadaeef75e4405d38.png)Qt项的选择如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d7d8627649c44cb7a72ce4490b95ad8c.png)
#### 4. 其他建议配置
- `BUILD_SHARED_LIBS`: `ON`(或根据你是否需要生成 DLL)
- `VTK_BUILD_EXAMPLES`: `ON`(如需示例)
- `VTK_WRAP_PYTHON`: `OFF`(如无 Python 绑定需求)

#### 5. 点击 **Generate** 
- 出现如下:
Configuring done
Generating done
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ab90bc69e390408e9f1bd8ece6777350.png)
### 1.3、在 Visual Studio 中编译

1. 打开生成的 VTK.sln 项目
2. 选择 `Release` 或 `Debug`,本教材选择 `Release`
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f1f4b71d411c4080a94bcc68ce120862.png)

3. 右键解决方案,点击 **全部生成**
最终生成的内容如下:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2bb5cdff82634c3eb67e4e1e2b7095fe.png)

---

### 1.4、验证 & 使用

- 编译成功后,可以在 `bin/` 和 `lib/` 目录中找到 VTK 可执行文件与库,lib的文件内容如下方便大家使用。
~~~
vtkcgns-9.1.lib
vtkChartsCore-9.1.lib
vtkCommonColor-9.1.lib
vtkCommonComputationalGeometry-9.1.lib
vtkCommonCore-9.1.lib
vtkCommonDataModel-9.1.lib
vtkCommonExecutionModel-9.1.lib
vtkCommonMath-9.1.lib
vtkCommonMisc-9.1.lib
vtkCommonSystem-9.1.lib
vtkCommonTransforms-9.1.lib
vtkDICOMParser-9.1.lib
vtkDomainsChemistry-9.1.lib
vtkDomainsChemistryOpenGL2-9.1.lib
vtkdoubleconversion-9.1.lib
vtkexodusII-9.1.lib
vtkexpat-9.1.lib
vtkFiltersAMR-9.1.lib
vtkFiltersCore-9.1.lib
vtkFiltersExtraction-9.1.lib
vtkFiltersFlowPaths-9.1.lib
vtkFiltersGeneral-9.1.lib
vtkFiltersGeneric-9.1.lib
vtkFiltersGeometry-9.1.lib
vtkFiltersHybrid-9.1.lib
vtkFiltersHyperTree-9.1.lib
vtkFiltersImaging-9.1.lib
vtkFiltersModeling-9.1.lib
vtkFiltersParallel-9.1.lib
vtkFiltersParallelImaging-9.1.lib
vtkFiltersPoints-9.1.lib
vtkFiltersProgrammable-9.1.lib
vtkFiltersSelection-9.1.lib
vtkFiltersSMP-9.1.lib
vtkFiltersSources-9.1.lib
vtkFiltersStatistics-9.1.lib
vtkFiltersTexture-9.1.lib
vtkFiltersTopology-9.1.lib
vtkFiltersVerdict-9.1.lib
vtkfmt-9.1.lib
vtkfreetype-9.1.lib
vtkGeovisCore-9.1.lib
vtkgl2ps-9.1.lib
vtkglew-9.1.lib
vtkGUISupportQt-9.1.lib
vtkGUISupportQtQuick-9.1.lib
vtkGUISupportQtSQL-9.1.lib
vtkhdf5-9.1.lib
vtkhdf5_hl-9.1.lib
vtkImagingColor-9.1.lib
vtkImagingCore-9.1.lib
vtkImagingFourier-9.1.lib
vtkImagingGeneral-9.1.lib
vtkImagingHybrid-9.1.lib
vtkImagingMath-9.1.lib
vtkImagingMorphological-9.1.lib
vtkImagingSources-9.1.lib
vtkImagingStatistics-9.1.lib
vtkImagingStencil-9.1.lib
vtkInfovisCore-9.1.lib
vtkInfovisLayout-9.1.lib
vtkInteractionImage-9.1.lib
vtkInteractionStyle-9.1.lib
vtkInteractionWidgets-9.1.lib
vtkIOAMR-9.1.lib
vtkIOAsynchronous-9.1.lib
vtkIOCGNSReader-9.1.lib
vtkIOChemistry-9.1.lib
vtkIOCityGML-9.1.lib
vtkIOCONVERGECFD-9.1.lib
vtkIOCore-9.1.lib
vtkIOEnSight-9.1.lib
vtkIOExodus-9.1.lib
vtkIOExport-9.1.lib
vtkIOExportGL2PS-9.1.lib
vtkIOExportPDF-9.1.lib
vtkIOGeometry-9.1.lib
vtkIOHDF-9.1.lib
vtkIOImage-9.1.lib
vtkIOImport-9.1.lib
vtkIOInfovis-9.1.lib
vtkIOIOSS-9.1.lib
vtkIOLegacy-9.1.lib
vtkIOLSDyna-9.1.lib
vtkIOMINC-9.1.lib
vtkIOMotionFX-9.1.lib
vtkIOMovie-9.1.lib
vtkIONetCDF-9.1.lib
vtkIOOggTheora-9.1.lib
vtkIOParallel-9.1.lib
vtkIOParallelXML-9.1.lib
vtkIOPLY-9.1.lib
vtkIOSegY-9.1.lib
vtkIOSQL-9.1.lib
vtkioss-9.1.lib
vtkIOTecplotTable-9.1.lib
vtkIOVeraOut-9.1.lib
vtkIOVideo-9.1.lib
vtkIOXML-9.1.lib
vtkIOXMLParser-9.1.lib
vtkjpeg-9.1.lib
vtkjsoncpp-9.1.lib
vtkkissfft-9.1.lib
vtklibharu-9.1.lib
vtklibproj-9.1.lib
vtklibxml2-9.1.lib
vtkloguru-9.1.lib
vtklz4-9.1.lib
vtklzma-9.1.lib
vtkmetaio-9.1.lib
vtknetcdf-9.1.lib
vtkogg-9.1.lib
vtkParallelCore-9.1.lib
vtkParallelDIY-9.1.lib
vtkpng-9.1.lib
vtkpugixml-9.1.lib
vtkRenderingAnnotation-9.1.lib
vtkRenderingContext2D-9.1.lib
vtkRenderingContextOpenGL2-9.1.lib
vtkRenderingCore-9.1.lib
vtkRenderingFreeType-9.1.lib
vtkRenderingGL2PSOpenGL2-9.1.lib
vtkRenderingImage-9.1.lib
vtkRenderingLabel-9.1.lib
vtkRenderingLOD-9.1.lib
vtkRenderingOpenGL2-9.1.lib
vtkRenderingQt-9.1.lib
vtkRenderingSceneGraph-9.1.lib
vtkRenderingUI-9.1.lib
vtkRenderingVolume-9.1.lib
vtkRenderingVolumeOpenGL2-9.1.lib
vtkRenderingVtkJS-9.1.lib
vtksqlite-9.1.lib
vtksys-9.1.lib
vtkTestingIOSQL-9.1.lib
vtkTestingRendering-9.1.lib
vtktheora-9.1.lib
vtktiff-9.1.lib
vtkverdict-9.1.lib
vtkViewsContext2D-9.1.lib
vtkViewsCore-9.1.lib
vtkViewsInfovis-9.1.lib
vtkViewsQt-9.1.lib
vtkWrappingTools-9.1.lib
vtkzlib-9.1.lib

~~~
获取lib文件名的代码如下,方便快捷:
```shell
@echo off
#dir . /b >list.txt
dir /b *-9.1.lib > filename.txt
exit
  • 可用 Qt 写一个简单的 VTK + Qt 示例测试,测试是否编译正确。

打开VS软件新建Qt Empty Application项目,名字为Qt+VTKTest,分别如下。
在这里插入图片描述
在这里插入图片描述
main.cpp的内容如下:

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QVTKOpenGLNativeWidget.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkRenderer.h>
#include <QVTKOpenGLNativeWidget.h>

#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkCubeSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkGenericOpenGLRenderWindow.h>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QMainWindow window;

    // 初始化 VTK 渲染窗口和 Widget
    auto vtkWidget = new QVTKOpenGLNativeWidget(&window);
    auto renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    vtkWidget->setRenderWindow(renderWindow);

    auto renderer = vtkSmartPointer<vtkRenderer>::New();
    renderWindow->AddRenderer(renderer);

    // 创建一个立方体
    auto cubeSource = vtkSmartPointer<vtkCubeSource>::New();
    cubeSource->SetXLength(1.0);
    cubeSource->SetYLength(1.0);
    cubeSource->SetZLength(1.0);

    auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputConnection(cubeSource->GetOutputPort());

    auto actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    renderer->AddActor(actor);
    renderer->SetBackground(0.1, 0.2, 0.3);  // 背景色

    window.setCentralWidget(vtkWidget);
    window.resize(800, 600);
    window.setWindowTitle("Qt + VTK Cube Example");
    window.show();

    return app.exec();
}

在VS中配置好Qt和VTK后运行的结果如下图所示,表示Qt+VTK编译成功。
在这里插入图片描述
至此完成Qt+VTK的源码编译,为后面的工作进行打好环境基础。


2、 Linux环境上安装PCL点云库和相关库(VTKEigenBoost

由于部分朋友在Linux环境使用学习,下面简单讲解一下在Linux环境下安装PCL库。

2.1、安装 PCL 的依赖库
1. 安装 VTK

VTK(Visualization Toolkit)用于点云数据的可视化,特别是三维图形渲染。安装 VTK 时,可以使用系统包管理器(例如 apt)来简化安装过程。

在 Ubuntu/Debian 上安装 VTK
sudo apt update
sudo apt install libvtk6-dev

如果你使用的是 VTK 8.x 或更高版本,可以安装最新的 VTK 包:

sudo apt install libvtk9-dev
从源代码编译 VTK(如果需要特定版本)
  1. 克隆 VTK 的 Git 仓库:

    git clone https://gitlab.kitware.com/vtk/vtk.git
    cd vtk
    
  2. 创建构建目录并编译:

    mkdir build
    cd build
    cmake ..
    make -j$(nproc)
    sudo make install
    
2. 安装 Eigen

Eigen 是一个 C++ 模板库,主要用于线性代数运算,在 PCL 中用于矩阵和向量操作。Eigen 是一个头文件库,因此不需要编译,只需要安装头文件即可。

在 Ubuntu/Debian 上安装 Eigen
sudo apt update
sudo apt install libeigen3-dev
从源代码安装 Eigen
  1. 下载 Eigen 源代码:

    git clone https://gitlab.com/libeigen/eigen.git
    cd eigen
    
  2. 安装 Eigen:

    mkdir build
    cd build
    cmake ..
    sudo make install
    
3. 安装 Boost

Boost 是一个 C++ 开源库集合,包含很多工具和功能(如数据结构、算法等)。在 PCL 中,Boost 用于处理线程、文件系统等。

在 Ubuntu/Debian 上安装 Boost
sudo apt update
sudo apt install libboost-all-dev

如果你只需要安装特定模块,可以单独安装:

sudo apt install libboost-thread-dev libboost-filesystem-dev libboost-system-dev
从源代码安装 Boost
  1. 下载 Boost 源代码:

    wget https://boostorg.jfrog.io/artifactory/main/release/1.78.0/source/boost_1_78_0.tar.gz
    tar -xvf boost_1_78_0.tar.gz
    cd boost_1_78_0
    
  2. 编译和安装:

    ./bootstrap.sh
    sudo ./b2 install
    

2.2、验证安装
1. 验证 VTK 安装

运行以下命令来验证 VTK 是否已正确安装:

vtk --version

如果返回了 VTK 的版本号,则表示安装成功。

2. 验证 Eigen 安装

Eigen 是一个头文件库,因此无需单独的安装验证步骤。你可以通过以下命令检查是否成功安装:

dpkg -s libeigen3-dev
3. 验证 Boost 安装

使用以下命令验证 Boost 是否安装正确:

dpkg -s libboost-all-dev

如果返回了 Boost 包的详细信息,则表示 Boost 已正确安装。


2.3、安装 PCL

一旦 VTKEigenBoost 安装完成,你就可以安装 PCL。你可以通过 apt 或者从源代码进行安装。

1. 使用 apt 安装 PCL
sudo apt update
sudo apt install libpcl-dev
2. 从源代码安装 PCL
  1. 克隆 PCL 的 Git 仓库:

    git clone https://github.com/PointCloudLibrary/pcl.git
    cd pcl
    
  2. 创建构建目录并编译:

    mkdir build
    cd build
    cmake ..
    make -j$(nproc)
    sudo make install
    

2.4、总结

在 Linux 上配置 PCL 的依赖库,主要涉及安装 VTKEigenBoost。这些库可以通过 apt 包管理器轻松安装,或者从源代码编译以获得最新版本。安装完成后,你就可以开始在 Qt 项目中使用 PCL 进行点云处理和可视化了。如果你使用的是从源代码编译的版本,确保将相关路径添加到环境变量中(如 LD_LIBRARY_PATHCMAKE_PREFIX_PATH)。
至此完成第4讲的相关内容,欢迎喜欢的朋友订阅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云SLAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值