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,因此下载对应的版本,避免因为编译带来版本不对应的问题。
获取方式:
-
从 GitHub 获取:https://github.com/Kitware/VTK选择9.1.0
- -
或者直接下载 VTK 9.1.0 的 release zip 包
-
官网下载地址
-
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
效果图如下:
Qt项的选择如下:

#### 4. 其他建议配置
- `BUILD_SHARED_LIBS`: `ON`(或根据你是否需要生成 DLL)
- `VTK_BUILD_EXAMPLES`: `ON`(如需示例)
- `VTK_WRAP_PYTHON`: `OFF`(如无 Python 绑定需求)
#### 5. 点击 **Generate**
- 出现如下:
Configuring done
Generating done

### 1.3、在 Visual Studio 中编译
1. 打开生成的 VTK.sln 项目
2. 选择 `Release` 或 `Debug`,本教材选择 `Release`

3. 右键解决方案,点击 **全部生成**
最终生成的内容如下:

---
### 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点云库和相关库(VTK、Eigen 和 Boost)
由于部分朋友在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(如果需要特定版本)
-
克隆 VTK 的 Git 仓库:
git clone https://gitlab.kitware.com/vtk/vtk.git cd vtk
-
创建构建目录并编译:
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
-
下载 Eigen 源代码:
git clone https://gitlab.com/libeigen/eigen.git cd eigen
-
安装 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
-
下载 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
-
编译和安装:
./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
一旦 VTK、Eigen 和 Boost 安装完成,你就可以安装 PCL。你可以通过 apt 或者从源代码进行安装。
1. 使用 apt 安装 PCL
sudo apt update
sudo apt install libpcl-dev
2. 从源代码安装 PCL
-
克隆 PCL 的 Git 仓库:
git clone https://github.com/PointCloudLibrary/pcl.git cd pcl
-
创建构建目录并编译:
mkdir build cd build cmake .. make -j$(nproc) sudo make install
2.4、总结
在 Linux 上配置 PCL 的依赖库,主要涉及安装 VTK、Eigen 和 Boost。这些库可以通过 apt 包管理器轻松安装,或者从源代码编译以获得最新版本。安装完成后,你就可以开始在 Qt 项目中使用 PCL 进行点云处理和可视化了。如果你使用的是从源代码编译的版本,确保将相关路径添加到环境变量中(如 LD_LIBRARY_PATH
或 CMAKE_PREFIX_PATH
)。
至此完成第4讲的相关内容,欢迎喜欢的朋友订阅。