PCL库中虽然有VKT库,但是并不支持Qt中GUI的相关功能组件,以及Qt+PCL基本架构中的相关功能,因此需要重新自己编译VTK+Qt,以及编译后的VTK库和PCL库又进一步自编译,用于PCL库中的可视化部分,才能进行Qt+PCL应用开发,接下来先编译Qt+VTK。
由于PCL1.12.1库中对应的VTK库是9.1.0,因此下载对应的版本,避免因为编译带来版本不对应的问题。
获取方式:
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
),最终的结果如下图。Visual Studio 16 2019
x64
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
打开VS软件新建Qt Empty Application项目,名字为Qt+VTKTest,分别如下。
main.cpp的内容如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
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的源码编译,为后面的工作进行打好环境基础。
由于部分朋友在Linux环境使用学习,下面简单讲解一下在Linux环境下安装PCL库。
VTK(Visualization Toolkit)用于点云数据的可视化,特别是三维图形渲染。安装 VTK 时,可以使用系统包管理器(例如 apt)来简化安装过程。
sudo apt update
sudo apt install libvtk6-dev
如果你使用的是 VTK 8.x 或更高版本,可以安装最新的 VTK 包:
sudo apt install libvtk9-dev
克隆 VTK 的 Git 仓库:
git clone https://gitlab.kitware.com/vtk/vtk.git
cd vtk
创建构建目录并编译:
mkdir build
cd build
cmake ..
make -j$(nproc)
sudo make install
Eigen 是一个 C++ 模板库,主要用于线性代数运算,在 PCL 中用于矩阵和向量操作。Eigen 是一个头文件库,因此不需要编译,只需要安装头文件即可。
sudo apt update
sudo apt install libeigen3-dev
下载 Eigen 源代码:
git clone https://gitlab.com/libeigen/eigen.git
cd eigen
安装 Eigen:
mkdir build
cd build
cmake ..
sudo make install
Boost 是一个 C++ 开源库集合,包含很多工具和功能(如数据结构、算法等)。在 PCL 中,Boost 用于处理线程、文件系统等。
sudo apt update
sudo apt install libboost-all-dev
如果你只需要安装特定模块,可以单独安装:
sudo apt install libboost-thread-dev libboost-filesystem-dev libboost-system-dev
下载 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
运行以下命令来验证 VTK 是否已正确安装:
vtk --version
如果返回了 VTK 的版本号,则表示安装成功。
Eigen 是一个头文件库,因此无需单独的安装验证步骤。你可以通过以下命令检查是否成功安装:
dpkg -s libeigen3-dev
使用以下命令验证 Boost 是否安装正确:
dpkg -s libboost-all-dev
如果返回了 Boost 包的详细信息,则表示 Boost 已正确安装。
一旦 VTK、Eigen 和 Boost 安装完成,你就可以安装 PCL。你可以通过 apt 或者从源代码进行安装。
sudo apt update
sudo apt install libpcl-dev
克隆 PCL 的 Git 仓库:
git clone https://github.com/PointCloudLibrary/pcl.git
cd pcl
创建构建目录并编译:
mkdir build
cd build
cmake ..
make -j$(nproc)
sudo make install
在 Linux 上配置 PCL 的依赖库,主要涉及安装 VTK、Eigen 和 Boost。这些库可以通过 apt 包管理器轻松安装,或者从源代码编译以获得最新版本。安装完成后,你就可以开始在 Qt 项目中使用 PCL 进行点云处理和可视化了。如果你使用的是从源代码编译的版本,确保将相关路径添加到环境变量中(如 LD_LIBRARY_PATH
或 CMAKE_PREFIX_PATH
)。
至此完成第4讲的相关内容,欢迎喜欢的朋友订阅。