为了和我的VS的版本VS 2017对应,PCL下载的也是msvc_2017,PCL msvc2017最新的则是1.901版本,我们就以PCL 1.9.1为例了。(如果你的vs是2019和2022,一定要注意PCL的版本)。
一、下载PCL
我们打开PCL的github下载地址(点击下载),下载我们需要的版本,如下图:

我们统一也下载64位的版本,下载PCL-1.9.1-AllInOne-msvc2017-win64.exe和pcl-1.9.1-pdb-msvc2017-win64.zip

二、PCL的安装
点击PCL-1.9.1-AllInOne-msvc2017-win64.exe,通过管理员权限打开:

点击“下一步”

点击“我接受”.

选择第二个:Add PCL to the system PATH for all users,然后,点击 下一步。
弹出安装位置,注意此处PCL后面有个空格

我自己选择了自定义的安装路径

安装注意:不要带中文和空格
点击下一步

勾选所有的,然后点击 安装

正在进行安装

安装过程中会跳出如下OpenNI安装界面

选择路径/3rdParty/OpenNI2/安装(为了之后方便配置环境)。

OpenNI安装完成。

PCL安装完成。

安装完成后,我们在安装文件夹下可以看到安装的内容:

安装完成之后,我们打开环境变量,可以看到环境变量变化如下:

安装完成后,解压下载的pcl-1.11.0-pdb-msvc2017-win64.zip文件。

把解压的内容拷贝到pcl安装路径下的bin文件夹内:

三、VTK替换
在我们安装文件夹内,可以看到有VTK的存在

但是PCL 安装目录下的 VTK 并不完整,其中就少了与 Qt 相关的模块,而这些模块是 CloudViewer 编译运行所需要的(如
QVTKWidget)。所以我们需要手动编译 VTK,并替换 PCL/3rdParty下的 VTK。
我们把把编译好的VTK拷贝替换PCL安装的这个。
VTK的编译可以参考:VTK8.2.0编译(Qt 5.14.2+VS2017)

四、设置环境变量
先在新建一个变量PCL_ROOT,变量值为我们pcl的安装目录:

然后双击Path中增加环境变量:


然后重启电脑。
五、使用Qt Creator创建点云程序
1、使用Qt 创建一个MSVC 64位的程序,命名pcltest001,然后在pro文件中配置pcl相关的内容:
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/Boost/include/boost-1_68 \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/Eigen/eigen3 \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/FLANN/include/flann \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/OpenNI2/Include \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/Qhull/include \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/3rdParty/VTK/include/vtk-8.2 \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/include/pcl-1.9/pcl \
INCLUDEPATH += D:/Soft_Install/PCL1.9.1/include/pcl-1.9 \
LIBS += -LD:/Soft_Install/PCL1.9.1/lib \
        -lpcl_common_release \
        -lpcl_features_release \
        -lpcl_filters_release \
        -lpcl_io_release \
        -lpcl_io_ply_release \
        -lpcl_kdtree_release \
        -lpcl_keypoints_release \
        -lpcl_ml_release \
        -lpcl_octree_release \
        -lpcl_outofcore_release \
        -lpcl_people_release \
        -lpcl_recognition_release \
        -lpcl_registration_release \
        -lpcl_sample_consensus_release \
        -lpcl_search_release \
        -lpcl_segmentation_release \
        -lpcl_stereo_release \
        -lpcl_surface_release \
        -lpcl_tracking_release \
        -lpcl_visualization_release
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/Boost/lib/ \
        -llibboost_atomic-vc141-mt-x64-1_68\
        -llibboost_bzip2-vc141-mt-x64-1_68\
        -llibboost_chrono-vc141-mt-x64-1_68\
        -llibboost_container-vc141-mt-x64-1_68\
        -llibboost_context-vc141-mt-x64-1_68\
        -llibboost_contract-vc141-mt-x64-1_68\
        -llibboost_coroutine-vc141-mt-x64-1_68\
        -llibboost_date_time-vc141-mt-x64-1_68\
        -llibboost_exception-vc141-mt-x64-1_68\
        -llibboost_fiber-vc141-mt-x64-1_68\
        -llibboost_filesystem-vc141-mt-x64-1_68\
        -llibboost_graph-vc141-mt-x64-1_68\
        -llibboost_graph_parallel-vc141-mt-x64-1_68\
        -llibboost_iostreams-vc141-mt-x64-1_68\
        -llibboost_locale-vc141-mt-x64-1_68\
        -llibboost_log-vc141-mt-x64-1_68\
        -llibboost_log_setup-vc141-mt-x64-1_68\
        -llibboost_math_c99-vc141-mt-x64-1_68\
        -llibboost_math_c99f-vc141-mt-x64-1_68\
        -llibboost_math_c99l-vc141-mt-x64-1_68\
        -llibboost_math_tr1-vc141-mt-x64-1_68\
        -llibboost_math_tr1f-vc141-mt-x64-1_68\
        -llibboost_math_tr1l-vc141-mt-x64-1_68\
        -llibboost_mpi-vc141-mt-x64-1_68\
        -llibboost_numpy27-vc141-mt-x64-1_68\
        -llibboost_numpy37-vc141-mt-x64-1_68\
        -llibboost_prg_exec_monitor-vc141-mt-x64-1_68\
        -llibboost_program_options-vc141-mt-x64-1_68\
        -llibboost_python27-vc141-mt-x64-1_68\
        -llibboost_python37-vc141-mt-x64-1_68\
        -llibboost_random-vc141-mt-x64-1_68\
        -llibboost_regex-vc141-mt-x64-1_68\
        -llibboost_serialization-vc141-mt-x64-1_68\
        -llibboost_signals-vc141-mt-x64-1_68\
        -llibboost_stacktrace_noop-vc141-mt-x64-1_68\
        -llibboost_stacktrace_windbg-vc141-mt-x64-1_68\
        -llibboost_stacktrace_windbg_cached-vc141-mt-x64-1_68\
        -llibboost_system-vc141-mt-x64-1_68\
        -llibboost_test_exec_monitor-vc141-mt-x64-1_68\
        -llibboost_thread-vc141-mt-x64-1_68\
        -llibboost_timer-vc141-mt-x64-1_68\
        -llibboost_type_erasure-vc141-mt-x64-1_68\
        -llibboost_unit_test_framework-vc141-mt-x64-1_68\
        -llibboost_wave-vc141-mt-x64-1_68\
        -llibboost_wserialization-vc141-mt-x64-1_68\
        -llibboost_zlib-vc141-mt-x64-1_68
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/FLANN/lib\
        -lflann\
        -lflann_cpp\
        -lflann_cpp_s\
        -lflann_s\
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/OpenNI2/Lib\
        -lOpenNI2
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/Qhull/lib\
        -lqhull\
        -lqhullcpp\
        -lqhullstatic\
        -lqhullstatic_r\
        -lqhull_p\
        -lqhull_r
LIBS += -LD:/Soft_Install/PCL1.9.1/3rdParty/VTK/lib \
        -lvtkChartsCore-8.2 \
        -lvtkCommonColor-8.2 \
        -lvtkCommonComputationalGeometry-8.2 \
        -lvtkCommonCore-8.2 \
        -lvtkCommonDataModel-8.2 \
        -lvtkCommonExecutionModel-8.2 \
        -lvtkCommonMath-8.2 \
        -lvtkCommonMisc-8.2 \
        -lvtkCommonSystem-8.2 \
        -lvtkCommonTransforms-8.2 \
        -lvtkDICOMParser-8.2 \
        -lvtkDomainsChemistry-8.2 \
        -lvtkDomainsChemistryOpenGL2-8.2 \
        -lvtkdoubleconversion-8.2 \
        -lvtkexodusII-8.2 \
        -lvtkexpat-8.2 \
        -lvtkFiltersAMR-8.2 \
        -lvtkFiltersCore-8.2 \
        -lvtkFiltersExtraction-8.2 \
        -lvtkFiltersFlowPaths-8.2 \
        -lvtkFiltersGeneral-8.2 \
        -lvtkFiltersGeneric-8.2 \
        -lvtkFiltersGeometry-8.2 \
        -lvtkFiltersHybrid-8.2 \
        -lvtkFiltersHyperTree-8.2 \
        -lvtkFiltersImaging-8.2 \
        -lvtkFiltersModeling-8.2 \
        -lvtkFiltersParallel-8.2 \
        -lvtkFiltersParallelImaging-8.2 \
        -lvtkFiltersPoints-8.2 \
        -lvtkFiltersProgrammable-8.2 \
        -lvtkFiltersSelection-8.2 \
        -lvtkFiltersSMP-8.2 \
        -lvtkFiltersSources-8.2 \
        -lvtkFiltersStatistics-8.2 \
        -lvtkFiltersTexture-8.2 \
        -lvtkFiltersTopology-8.2 \
        -lvtkFiltersVerdict-8.2 \
        -lvtkfreetype-8.2 \
        -lvtkGeovisCore-8.2 \
        -lvtkgl2ps-8.2 \
        -lvtkglew-8.2 \
        -lvtkGUISupportQt-8.2 \
        -lvtkGUISupportQtOpenGL-8.2 \
        -lvtkGUISupportQtSQL-8.2 \
        -lvtkhdf5-8.2 \
        -lvtkhdf5_hl-8.2 \
        -lvtkImagingColor-8.2 \
        -lvtkImagingCore-8.2 \
        -lvtkImagingFourier-8.2 \
        -lvtkImagingGeneral-8.2 \
        -lvtkImagingHybrid-8.2 \
        -lvtkImagingMath-8.2 \
        -lvtkImagingMorphological-8.2 \
        -lvtkImagingSources-8.2 \
        -lvtkImagingStatistics-8.2 \
        -lvtkImagingStencil-8.2 \
        -lvtkInfovisCore-8.2 \
        -lvtkInfovisLayout-8.2 \
        -lvtkInteractionImage-8.2 \
        -lvtkInteractionStyle-8.2 \
        -lvtkInteractionWidgets-8.2 \
        -lvtkIOAMR-8.2 \
        -lvtkIOAsynchronous-8.2 \
        -lvtkIOCityGML-8.2 \
        -lvtkIOCore-8.2 \
        -lvtkIOEnSight-8.2 \
        -lvtkIOExodus-8.2 \
        -lvtkIOExport-8.2 \
        -lvtkIOExportOpenGL2-8.2 \
        -lvtkIOExportPDF-8.2 \
        -lvtkIOGeometry-8.2 \
        -lvtkIOImage-8.2 \
        -lvtkIOImport-8.2 \
        -lvtkIOInfovis-8.2 \
        -lvtkIOLegacy-8.2 \
        -lvtkIOLSDyna-8.2 \
        -lvtkIOMINC-8.2 \
        -lvtkIOMovie-8.2 \
        -lvtkIONetCDF-8.2 \
        -lvtkIOParallel-8.2 \
        -lvtkIOParallelXML-8.2 \
        -lvtkIOPLY-8.2 \
        -lvtkIOSegY-8.2 \
        -lvtkIOSQL-8.2 \
        -lvtkIOTecplotTable-8.2 \
        -lvtkIOVeraOut-8.2 \
        -lvtkIOVideo-8.2 \
        -lvtkIOXML-8.2 \
        -lvtkIOXMLParser-8.2 \
        -lvtkjpeg-8.2 \
        -lvtkjsoncpp-8.2 \
        -lvtklibharu-8.2 \
        -lvtklibxml2-8.2 \
        -lvtkLocalExample-8.2 \
        -lvtklz4-8.2 \
        -lvtklzma-8.2 \
        -lvtkmetaio-8.2 \
        -lvtkNetCDF-8.2 \
        -lvtkogg-8.2 \
        -lvtkParallelCore-8.2 \
        -lvtkpng-8.2 \
        -lvtkproj-8.2 \
        -lvtkpugixml-8.2 \
        -lvtkRenderingAnnotation-8.2 \
        -lvtkRenderingContext2D-8.2 \
        -lvtkRenderingContextOpenGL2-8.2 \
        -lvtkRenderingCore-8.2 \
        -lvtkRenderingFreeType-8.2 \
        -lvtkRenderingGL2PSOpenGL2-8.2 \
        -lvtkRenderingImage-8.2 \
        -lvtkRenderingLabel-8.2 \
        -lvtkRenderingLOD-8.2 \
        -lvtkRenderingOpenGL2-8.2 \
        -lvtkRenderingQt-8.2 \
        -lvtkRenderingVolume-8.2 \
        -lvtkRenderingVolumeOpenGL2-8.2 \
        -lvtksqlite-8.2 \
        -lvtksys-8.2 \
        -lvtktheora-8.2 \
        -lvtktiff-8.2 \
        -lvtkverdict-8.2 \
        -lvtkViewsContext2D-8.2 \
        -lvtkViewsCore-8.2 \
        -lvtkViewsInfovis-8.2 \
        -lvtkViewsQt-8.2 \
        -lvtkzlib-8.2
 
main函数中输入下面的code:
#include "mainwindow.h"
#include <QApplication>
#include <iostream> //标准输入输出流
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/io/ply_io.h>
#include <pcl/point_types.h> //PCL对各种格式的点的支持头文件
#include <pcl/visualization/cloud_viewer.h>//点云查看窗口头文件
#include <pcl/point_cloud.h>
#include <QDebug>
#include <QDir>
typedef pcl::PointXYZ PointT;
using namespace std;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//    MainWindow w;
//    w.show();
    std::cout<<"start"<<std::endl;
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    QString file = "E:/Project_Data/PCL_Data/rabbit.pcd";
    file = "E:/My_Soft/PCL/PCL_1.9.1/rabbit.pcd";
    // 读取点云,失败返回-1
    if (pcl::io::loadPCDFile<PointT>(file.toStdString(), *cloud) == -1)
    {
        PCL_ERROR("couldn't read file\n");
        std::cout<<"error"<<std::endl;
        return (-1);
    }
    std::cout << cloud->points.size() << std::endl;
    // 点云可视化
    pcl::visualization::CloudViewer viewer("Cloud Viewer");
    viewer.showCloud(cloud);
    // 循环判断是否退出
    while (!viewer.wasStopped()) {
        // 后续也可以在这里对点云做很多处理
    }
    std::cout<<"end"<<std::endl;
    return a.exec();
} 
报错的处理:

D:\Soft_Install\PCL1.9.1\include\pcl-1.9\pcl\visualization\impl\pcl_visualizer.hpp:1545: error: C2039: “ImmediateModeRenderingOff”: 不是“vtkMapper”的成员




重新编译运行:

我把rabbit文件,放到了百度云盘中,大家可以下载
链接:https://pan.baidu.com/s/11U9jmCkaSShy3ZpvYWAN3g
提取码:mvov
但是,美中不足的是会弹出Generic Waning框:

我尝试了网络上网友提供的很多方法,也无法把这个警告框去除掉。中间我也重新使用VTK8.2.0替换了,也不行。VTK8.1.0我也重新编译了,还是解决不了。
所以,我就重新安装了PCL1.8.1版本。
不知道你安装这个1.9.1会不会也会出现,欢迎你留言我们交流。
文章未经授权,禁止转载!



















