IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    三维点云处理入门(7):在Win10下安装PCL1.11.1库详细教程

    52txr发表于 2024-03-19 16:56:00
    love 0

    本文详细介绍了如何在Windows 10下安装PCL1.11.1库,并提供了资源包下载、安装教程、环境变量配置等步骤。同时,还解决了环境变量path值大于1023的问题,并指导读者如何配置PCL项目。

    资源包下载

    由于网络原因,一些朋友可能下载不了,这里我提供了PCL1.11.1+PDB包+Visual Studio 2019 x64的下载。

    下载地址1:PCL1.11.1+PDB包+Visual Studio 2019 x64 - 123网盘下载

    下载地址2:PCL1.11.1+PDB包+Visual Studio 2019 x64 - 百度网盘下载 提取码: h969

    资源包下载

    PCL1.11.1+PDB

    为了学习使用,我选择了PCL1.11.1版本。这不是2024年最新的。由于为了和教程保持一致,所以选择这个版本。

    PCL 1.11.1 - Github地址

    PCL1.11.1+PDB官网下载

    Visual Studio 2019

    下载地址:https://visualstudio.microsoft.com/downloads/

    Visual Studio 2019 Community 社区版(免费版)

    简体中文版下载地址:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&rel=16

    Visual Studio 2019安装

    安装教程

    可以先简单了解一下库:

    Boost:用于智能指针等操作

    Eigen :用于矩阵运算等

    FLANN:用于邻域搜索等

    VTL:可视化库,用于显示点云等

    QHULL:一个强大的计算几何库,可以用于计算高维的Delaunay triangulation, Voronoi diagram ,convex hull,等

    OpenNl:用于获取点云等

    1、安装VS2019

    别的就像安装正常软件一样,主要记得勾选“使用c + +的桌面开发”,可以修改安装路径(目录)

    使用c + +的桌面开发

    接下来就是漫长的等待过程。

    别的倒是没啥。

    等待VS的安装

    2、安装PCL1.11.1

    整个安装过程需要注意以下三点,其它默认即可:

    • 安装路径最好不要包括中文,直接简洁一点,例如D:\PCL;
    • 建议勾选上AddPCLtothesystemPATHforallusers;
    • 安装时,会提示安装OpenNI,这个建议安装在PCL安装路径的3rdParty下的OpenNI2文件夹中。

    直接运行 PCL-xxxxx-win64.exe。一定要选择第二项Add PCL to the system PATH for all users

    运行 PCL-xxxxx-win64.exe

    路径我设置的是D:\PCL,如下图:

    路径设置

    进行安装:

    等待安装完成

    安装完成:

    完成安装

    4、重装OpenNI

    这一步不是必须的,是小陶的强迫症选项。安装PCL默认会安装到C:\Program Files\OpenNI2,但是我想安装到PCL一起去。因此需要重新安装。

    先卸载旧的:

    卸载OpenNI

    安装包在:D:\PCL\3rdParty\OpenNI2

    安装OpenNI

    安装时候路径改一下就行了:

    安装路径改一下

    大功告成,很简单对吧。

    完成安装

    3、环境变量path的值大于1023的解决办法

    有的同志可能会出现“此环境变量太大”情况。

    引用CSDN的解决办法:环境变量path的值大于1023的解决办法

    环境变量太大

    1.计算机—>属性—>更改设置—>高级—>环境变量

    2.然后编辑Path,全选将其中的路径全部复制出来。新建一个系统变量取名path1,将复制的内容放入其中。

    3.然后在Path中建立一个引用。也就是引用path1的路径。

    方法:在path中开头或者结尾中放入%path1% 注意前后加;就行

    环境变量path的值太大

    4、环境变量

    %PCL_ROOT%\bin
    %PCL_ROOT%\3rdParty\VTK\bin
    %PCL_ROOT%\3rdParty\FLANN\bin
    %OPENNI2_REDIST64%
    %PCL_ROOT%\3rdParty\Qhull\bin
    %PCL_ROOT%\3rdParty\OpenNI2\Tools
    %OPENNI2_LIB64%
    %OPENNI2_INCLUDE64%

    设置环境变量

    添加环境变量记得需要重启一下电脑生效。可以一直往后继续安装,等到运行demo之前重启一下即可。

    5、拷贝PDB文件

    拷贝与你安装PCL版本对应的PDB压缩包解压后的PDB文件,到你PCL安装路径下的bin文件夹,我的是在D:\PCL

    拷贝PDB文件

    5、配置PCL

    创建新项目

    打开VS,点击创建新项目:

    创建新项目

    选择空项目:

    空项目

    配置新项目:

    设置项目路径

    配置项目

    选择Debug模式,并将x86改为64位(此处是依托于64位来介绍的),如下图

    Debug模式

    右键项目PCL1,(注意,是PCL1,而不是上面的解决方案“PCL1”))选择属性,设置项目属性,如下图

    属性

    点击VC++目录:

    VC++

    包含目录

    选择VC++目录->包含目录,添加包含目录,共7个

    D:\PCL\include\pcl-1.11
    D:\PCL\3rdParty\VTK\include\vtk-8.2
    D:\PCL\3rdParty\Qhull\include
    D:\PCL\3rdParty\OpenNI2\Include
    D:\PCL\3rdParty\FLANN\include
    D:\PCL\3rdParty\Eigen\eigen3
    D:\PCL\3rdParty\Boost\include\boost-1_74

    包含目录

    库目录

    选择VC++属性->库目录,添加库目录,共6个

    D:\PCL\3rdParty\VTK\lib
    D:\PCL\3rdParty\OpenNI2\Lib
    D:\PCL\3rdParty\Boost\lib
    D:\PCL\3rdParty\FLANN\lib
    D:\PCL\3rdParty\Qhull\lib
    D:\PCL\lib

    库目录

    预处理器定义

    _CRT_SECURE_NO_WARNINGS
    _SCL_SECURE_NO_WARNINGS
    _SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING

    这个在VS2019中发现没有直接在里面,可以先随便写一个cpp文件,例如我的tetst.cpp:

    预处理器定义

    点击运行一下。

    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout << "Hello, World!";
        return 0;
    }

    然后再打开项目属性就有了C/C++:

    项目属性就有了C/C++

    预处理器定义

    取消SDL检查

    SDL检查

    取消符合模式

    符合模式

    附加依赖项

    在链接器-输入-附加依赖项中添加以下lib文件。

    首先是Debug模式下:

    附加依赖项

    添加的目录有,复制粘贴即可(Debug模式下):

    %(AdditionalDependencies)
    pcl_commond.lib
    pcl_featuresd.lib
    pcl_filtersd.lib
    pcl_iod.lib
    pcl_io_plyd.lib
    pcl_kdtreed.lib
    pcl_keypointsd.lib
    pcl_mld.lib
    pcl_octreed.lib
    pcl_outofcored.lib
    pcl_peopled.lib
    pcl_recognitiond.lib
    pcl_registrationd.lib
    pcl_sample_consensusd.lib
    pcl_searchd.lib
    pcl_segmentationd.lib
    pcl_stereod.lib
    pcl_surfaced.lib
    pcl_trackingd.lib
    pcl_visualizationd.lib
    vtkChartsCore-8.2-gd.lib
    vtkCommonColor-8.2-gd.lib
    vtkCommonComputationalGeometry-8.2-gd.lib
    vtkCommonCore-8.2-gd.lib
    vtkCommonDataModel-8.2-gd.lib
    vtkCommonExecutionModel-8.2-gd.lib
    vtkCommonMath-8.2-gd.lib
    vtkCommonMisc-8.2-gd.lib
    vtkCommonSystem-8.2-gd.lib
    vtkCommonTransforms-8.2-gd.lib
    vtkDICOMParser-8.2-gd.lib
    vtkDomainsChemistry-8.2-gd.lib
    vtkDomainsChemistryOpenGL2-8.2-gd.lib
    vtkdoubleconversion-8.2-gd.lib
    vtkexodusII-8.2-gd.lib
    vtkexpat-8.2-gd.lib
    vtkFiltersAMR-8.2-gd.lib
    vtkFiltersCore-8.2-gd.lib
    vtkFiltersExtraction-8.2-gd.lib
    vtkFiltersFlowPaths-8.2-gd.lib
    vtkFiltersGeneral-8.2-gd.lib
    vtkFiltersGeneric-8.2-gd.lib
    vtkFiltersGeometry-8.2-gd.lib
    vtkFiltersHybrid-8.2-gd.lib
    vtkFiltersHyperTree-8.2-gd.lib
    vtkFiltersImaging-8.2-gd.lib
    vtkFiltersModeling-8.2-gd.lib
    vtkFiltersParallel-8.2-gd.lib
    vtkFiltersParallelImaging-8.2-gd.lib
    vtkFiltersPoints-8.2-gd.lib
    vtkFiltersProgrammable-8.2-gd.lib
    vtkFiltersSelection-8.2-gd.lib
    vtkFiltersSMP-8.2-gd.lib
    vtkFiltersSources-8.2-gd.lib
    vtkFiltersStatistics-8.2-gd.lib
    vtkFiltersTexture-8.2-gd.lib
    vtkFiltersTopology-8.2-gd.lib
    vtkFiltersVerdict-8.2-gd.lib
    vtkfreetype-8.2-gd.lib
    vtkGeovisCore-8.2-gd.lib
    vtkgl2ps-8.2-gd.lib
    vtkglew-8.2-gd.lib
    vtkGUISupportMFC-8.2-gd.lib
    vtkhdf5-8.2-gd.lib
    vtkhdf5_hl-8.2-gd.lib
    vtkImagingColor-8.2-gd.lib
    vtkImagingCore-8.2-gd.lib
    vtkImagingFourier-8.2-gd.lib
    vtkImagingGeneral-8.2-gd.lib
    vtkImagingHybrid-8.2-gd.lib
    vtkImagingMath-8.2-gd.lib
    vtkImagingMorphological-8.2-gd.lib
    vtkImagingSources-8.2-gd.lib
    vtkImagingStatistics-8.2-gd.lib
    vtkImagingStencil-8.2-gd.lib
    vtkInfovisCore-8.2-gd.lib
    vtkInfovisLayout-8.2-gd.lib
    vtkInteractionImage-8.2-gd.lib
    vtkInteractionStyle-8.2-gd.lib
    vtkInteractionWidgets-8.2-gd.lib
    vtkIOAMR-8.2-gd.lib
    vtkIOAsynchronous-8.2-gd.lib
    vtkIOCityGML-8.2-gd.lib
    vtkIOCore-8.2-gd.lib
    vtkIOEnSight-8.2-gd.lib
    vtkIOExodus-8.2-gd.lib
    vtkIOExport-8.2-gd.lib
    vtkIOExportOpenGL2-8.2-gd.lib
    vtkIOExportPDF-8.2-gd.lib
    vtkIOGeometry-8.2-gd.lib
    vtkIOImage-8.2-gd.lib
    vtkIOImport-8.2-gd.lib
    vtkIOInfovis-8.2-gd.lib
    vtkIOLegacy-8.2-gd.lib
    vtkIOLSDyna-8.2-gd.lib
    vtkIOMINC-8.2-gd.lib
    vtkIOMovie-8.2-gd.lib
    vtkIONetCDF-8.2-gd.lib
    vtkIOParallel-8.2-gd.lib
    vtkIOParallelXML-8.2-gd.lib
    vtkIOPLY-8.2-gd.lib
    vtkIOSegY-8.2-gd.lib
    vtkIOSQL-8.2-gd.lib
    vtkIOTecplotTable-8.2-gd.lib
    vtkIOVeraOut-8.2-gd.lib
    vtkIOVideo-8.2-gd.lib
    vtkIOXML-8.2-gd.lib
    vtkIOXMLParser-8.2-gd.lib
    vtkjpeg-8.2-gd.lib
    vtkjsoncpp-8.2-gd.lib
    vtklibharu-8.2-gd.lib
    vtklibxml2-8.2-gd.lib
    vtklz4-8.2-gd.lib
    vtklzma-8.2-gd.lib
    vtkmetaio-8.2-gd.lib
    vtkNetCDF-8.2-gd.lib
    vtkogg-8.2-gd.lib
    vtkParallelCore-8.2-gd.lib
    vtkpng-8.2-gd.lib
    vtkproj-8.2-gd.lib
    vtkpugixml-8.2-gd.lib
    vtkRenderingAnnotation-8.2-gd.lib
    vtkRenderingContext2D-8.2-gd.lib
    vtkRenderingContextOpenGL2-8.2-gd.lib
    vtkRenderingCore-8.2-gd.lib
    vtkRenderingExternal-8.2-gd.lib
    vtkRenderingFreeType-8.2-gd.lib
    vtkRenderingGL2PSOpenGL2-8.2-gd.lib
    vtkRenderingImage-8.2-gd.lib
    vtkRenderingLabel-8.2-gd.lib
    vtkRenderingLOD-8.2-gd.lib
    vtkRenderingOpenGL2-8.2-gd.lib
    vtkRenderingVolume-8.2-gd.lib
    vtkRenderingVolumeOpenGL2-8.2-gd.lib
    vtksqlite-8.2-gd.lib
    vtksys-8.2-gd.lib
    vtktheora-8.2-gd.lib
    vtktiff-8.2-gd.lib
    vtkverdict-8.2-gd.lib
    vtkViewsContext2D-8.2-gd.lib
    vtkViewsCore-8.2-gd.lib
    vtkViewsInfovis-8.2-gd.lib
    vtkzlib-8.2-gd.lib

    运行demo

    rabbit.pcb

    百度云链接:https://pan.baidu.com/s/1Z1kbVI_09KW4TyYRZFc8PQ
    提取码:iusc

    在源文件在新建一个cpp文件,把下列代码复制进去,把rabbit.pcb和源cpp文件放在同一路径下,如下图。

    demo

    #include<iostream>
    #include<pcl/io/io.h>
    #include<pcl/io/pcd_io.h>
    #include<pcl/io/ply_io.h>
    #include<pcl/visualization/cloud_viewer.h>
    int user_data;
    using std::cout;
    
    
    void viewerOneOff(pcl::visualization::PCLVisualizer& viewer) {
        viewer.setBackgroundColor(1.0, 0.5, 1.0);   //设置背景颜色
    }
    
    int main() {
        pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    
        char strfilepath[256] = "rabbit.pcd";
        if (-1 == pcl::io::loadPCDFile(strfilepath, *cloud)) {
            cout << "error input!" << endl;
            return -1;
        }
    
        cout << cloud->points.size() << endl;
        pcl::visualization::CloudViewer viewer("Cloud Viewer");   //创建viewer对象
    
        viewer.showCloud(cloud);
        viewer.runOnVisualizationThreadOnce(viewerOneOff);
        system("pause");
        return 0;
    }

    运行rabbit的结果

    运行出这个结果说明已经大功告成!



沪ICP备19023445号-2号
友情链接