手把手配置PCL开发环境(保姆级)

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

一、概要

在计算机视觉和机器人领域里,PCL 通常指 Point Cloud Library(点云库):一个用于 2D/3D 图像和点云处理的开源 C++ 库,广泛用于机器人、自动驾驶、三维重建、激光雷达/RGB‑D 视觉等方向。

这里的演示以PCL-1.15.1为例,会直接给出相关配置数据,如果你安装的是1.15版本,可以直接复制。对于其它版本,我也会给出相应的解决方法或者代码,用来获取需要的配置信息。

二、前提安装

在使用PCL开发自己的项目之前需要安装相应的代码编辑器,通常使用“Visual Studio ”,后面的配置也是基于这个编辑器。我自己用的是2022版本的,其它版本的也可以,但是要考虑它与你自己下载的PCL是否兼容

可以直接去官网下载,或者直接点击这个链接:Visual Studio官网下载

三、安装Visual Studio 2022

1、简要介绍

可能你使用过VSCode编写过C \ C++代码,但是对于Visual Studio的了解比较少。简单来说,Visual Studio与VSCode一样,都是为用户提供编写代码窗口的编辑器。不同的是Visual Studio更加专业化,而VSCode则更加轻量级。

这里演示的是PCL-1.15.1版本,这个版本官方参照的C++编译器是MSVC,版本是2022。而Visual Studio使用的编译器就是MSVC,这也就是使用它来作为编辑器的原因,PCL-1.15.1参照的是MSVC2022,如果用别的编译器版本就会出错。这是非常重要的,在下载之前一定要对照好版本!!!

2、下载完成之后启动

成功启动界面

点击继续…

3、选择“使用C++的桌面开发”

选择“使用C++的桌面开发”

4、选择MSVC编译器(必须!!!)

选择MSVC编译器

这里下载编译器,是必选的,下拉就会找到。其余的,除过系统自动勾选的,你也可以根据自己的需要勾选别的。Visual Studio也支持修改下载的工具,如果忘记下载了什么或者多下载了什么工具,都可以后续自行更改。

同时,如果害怕C盘空间不够的话,可以尝试自己更改一下安装位置。我一般直接将这些与开发相关的就直接装在C盘了,很省力,也会避免后面使用时可能出现的路径问题。

5、点击下载 \ 修改

下载

6、下载完成

下载完成

7、文件位置(没有自己修改下载位置的话)

文件默认位置

位置小编给大家放这了,直接复制就行:
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE

在该目录下寻找文件devenv.exe,然后创建桌面方式:

显式更多选项

选择创建快捷方式:

创建快捷方式

完成!

成功!

四、安装PCL

1、简要说明

小编使用的版本是PCL-1.15.1,后续的演示也就是基于这个版本进行演示。不同的版本,比如你是1.14版本的,在后续的配置过程当中可能会有不同,小编会在后面说明,请关注,如果版本不一样不要照搬!!!

这里以另外一个作者写的安装1.14版本的PCL教程作为参考:
1.14版本安装PCL教程

2、下载安装包

下载PCL(1.15版本):官方网站

点击下载:

下载PCL

3、下载完成之后双击启动

点击下一步

点击下一步

4、我接受

点击我接受

5、按照顺序选择,然后下一步

选择配置

6、选择安装目录,放到其它盘,然后点击下一步

选择安装目录

7、下一步

下一步

8、点击安装

安装

9、安装完成!

安装完成

五、(正片开始)配置开发环境

1、配置环境变量

  1. 唤醒系统属性界面:Win + R,在窗口输入sysdm.cpl

唤醒系统属性

  1. 选择“高级”并选择“环境变量”

在这里插入图片描述

  1. 编辑环境变量

编辑环境变量

  1. 点击新建并添加以下几项

%PCL_ROOT%\bin
%PCL_ROOT%\3rdParty\VTK\bin
%PCL_ROOT%\3rdParty\FLANN\bin
C:\Program Files\OpenNI2\Tools
%PCL_ROOT%\3rdParty\Qhull\bin
%OPENNI2_REDIST64%
%OPENNI2_LIB64%
%OPENNI2_INCLUDE64%

编辑变量值

  1. 点击确定

确定

2、开始配置VS

创建新的项目:

创建新项目

3、选择语言C++

选择语言

4、创建空项目

空项目

选择后点击下一步

5、自己选择项目位置,然后添加

创建项目

6、选择属性管理器

选择属性管理器

7、添加配置属性

配置属性

8、命名配置文件

命名

完成后点击添加

9、打开配置文件

打开文件

10、设置SDL检查为否

设置SDL

11、“符合模式”设置为否

符合模式

12、选择高级矢量扩展

高级矢量扩展

13、配置包含目录

如果你的下载位置是从D:/PCL/这个路径下的,而且版本是1.15.0,那么就可以直接复制小编的地址。地址放在文章的最后啦!如果不是,继续看下面的操作。

打开你自己下载的文件路径,无论你是1.14版本还是1.15版本:

一直到这个目录下
主目录
小编是1.15,所以路径就是1.15

然后,进入子目录include,然后继续选择版本目录:
子目录

复制地址,最好先暂存到一个地方,自己建立txt文件,或者微信、QQ聊天框都行,将地址放上去:
获取地址

继续,退回到原来的主目录,选择\3rdParty,进入:
子目录
记住这个路径,然后进入\Boost\include,选择版本目录:
子目录
然后复制,将这个路径也暂存下来,然后退回到目录\3rdParty里面,选择\Eigen3\include\eigen3,然后复制路径:
在这里插入图片描述
继续将这个路径缓存下来,然后退回到那个目录中,如此往复,继续寻找类似于下面的子目录,并缓存下来:
\FLANN\include
\Qhull\include
\VTK\include\vtk-9.4

除此之外,再添加一个目录:C:\Program Files\OpenNI2\Include

接下来将这些缓存的内容传给包含目录:
包含目录

将前面获取的路径全部一个个添加进去:
添加目录

结果如下所示:
结果

完成之后按确定。

14、预处理器定义

预处理器

添加如下几行:
BOOST_USE_WINDOWS_H
NOMINMAX
_CRT_SECURE_NO_DEPRECATE

添加值

15、配置库目录

如果你的下载位置是从D:/PCL/这个路径下的,而且版本是1.15.0,那么就可以直接复制小编的地址。同样,地址放在文章的最后啦!

在这里插入图片描述

还是和前面一样,打开你自己下载的文件的目录:
主目录

选择子目录 \lib:
子目录
同样,复制并暂存路径,然后返回主目录,选择\3rdParty,并进入:
子目录

随后,和前面的做法一样,设法找到类似于这样的目录,进入并复制路径,然后缓存:
\3rdParty\Boost\lib
\3rdParty\FLANN\lib
\3rdParty\Qhull\lib
\3rdParty\VTK\lib

最后,再添加这样一个路径:
C:\Program Files\OpenNI2\Lib

添加值

16、配置附加依赖项

附加依赖项

这里需要将相关文件放进去,1.14与1.15的命名方式有所不同。这里小编写了一个python代码,将文件目录输入,然后批量取出即可:

import os

def extract_files_by_extension(folder_path, target_extension, output_file, exclude_string=None):
    """
    从指定文件夹中提取特定扩展名的文件路径,并保存到文本文件中。
    扩展名:.ply

    :param folder_path: 要扫描的文件夹路径
    :param target_extension: 目标扩展名(例如 '.txt')
    :param output_file: 保存结果的文件,存储获取的文件名
    :param exclude_string: 排除包含该字符串的文件(可选,默认为None表示不排除)
    """
    # 1. 初始化存储列表
    matched_files = []

    print(f"正在扫描文件夹: {folder_path}")
    print(f"查找扩展名: {target_extension}")
    if exclude_string:
        print(f"排除包含字符串: {exclude_string}")

    # 3. 遍历目录
    for filename in os.listdir(folder_path):
        # 先检查扩展名
        if filename.endswith(target_extension):
            # 再检查是否包含排除字符串
             if exclude_string and exclude_string in filename:
                 continue  # 跳过包含排除字符串的文件
             matched_files.append(filename)


    # 4. 保存结果到文件
    if matched_files:
        try:
            with open(output_file, 'w', encoding='utf-8') as f:
                for filename in matched_files:
                    # 每个元素占一行
                    f.write(filename + '\n')
            print(f"成功!共找到 {len(matched_files)} 个文件。")
            print(f"结果已保存至: {output_file}")
        except IOError as e:
            print(f"保存文件时出错: {e}")
    else:
        print("未找到匹配的文件。")


if __name__ == "__main__":
    # 配置参数(请根据实际情况修改以下路径)
    target_folder = r"路径"
    ext = ".lib"
    save_file = "输出文件名.txt"

    exclude_str = "-gd"  # 设置为 None 或 "" 表示不排除任何文件

    # 检查文件夹是否存在
    if os.path.exists(target_folder):
        extract_files_by_extension(target_folder, ext, save_file, exclude_str)
    else:
        print(f"错误:文件夹路径不存在 -> {target_folder}")

这里需要将VTK里面的(.lib)文件取出,小编直接用自己的下载路径了,大家用的时候就根据这个找到自己的位置,然后放到变量target_folder中去:
D:\PCL\PCL 1.15.0\3rdParty\VTK\lib

记得设置输出文件,比如text1.txt。

运行结束之后,重新设置路径,小编这里是D:\PCL\PCL 1.15.0\lib。然后设置变量exclude_str为“d.lib”,然后设置输出文件,比如text2.txt。

这样,就获取了所有的文件名:

pcl_common.lib
pcl_features.lib
pcl_filters.lib
pcl_io.lib
pcl_io_ply.lib
pcl_kdtree.lib
pcl_keypoints.lib
pcl_ml.lib
pcl_octree.lib
pcl_outofcore.lib
pcl_people.lib
pcl_recognition.lib
pcl_registration.lib
pcl_sample_consensus.lib
pcl_search.lib
pcl_segmentation.lib
pcl_stereo.lib
pcl_surface.lib
pcl_tracking.lib
pcl_visualization.lib
vtkcgns-9.4.lib
vtkChartsCore-9.4.lib
vtkCommonColor-9.4.lib
vtkCommonComputationalGeometry-9.4.lib
vtkCommonCore-9.4.lib
vtkCommonDataModel-9.4.lib
vtkCommonExecutionModel-9.4.lib
vtkCommonMath-9.4.lib
vtkCommonMisc-9.4.lib
vtkCommonSystem-9.4.lib
vtkCommonTransforms-9.4.lib
vtkDICOMParser-9.4.lib
vtkDomainsChemistry-9.4.lib
vtkDomainsChemistryOpenGL2-9.4.lib
vtkdoubleconversion-9.4.lib
vtkexodusII-9.4.lib
vtkexpat-9.4.lib
vtkFiltersAMR-9.4.lib
vtkFiltersCellGrid-9.4.lib
vtkFiltersCore-9.4.lib
vtkFiltersExtraction-9.4.lib
vtkFiltersFlowPaths-9.4.lib
vtkFiltersGeneral-9.4.lib
vtkFiltersGeneric-9.4.lib
vtkFiltersGeometry-9.4.lib
vtkFiltersGeometryPreview-9.4.lib
vtkFiltersHybrid-9.4.lib
vtkFiltersHyperTree-9.4.lib
vtkFiltersImaging-9.4.lib
vtkFiltersModeling-9.4.lib
vtkFiltersParallel-9.4.lib
vtkFiltersParallelImaging-9.4.lib
vtkFiltersPoints-9.4.lib
vtkFiltersProgrammable-9.4.lib
vtkFiltersReduction-9.4.lib
vtkFiltersSelection-9.4.lib
vtkFiltersSMP-9.4.lib
vtkFiltersSources-9.4.lib
vtkFiltersStatistics-9.4.lib
vtkFiltersTemporal-9.4.lib
vtkFiltersTensor-9.4.lib
vtkFiltersTexture-9.4.lib
vtkFiltersTopology-9.4.lib
vtkFiltersVerdict-9.4.lib
vtkfmt-9.4.lib
vtkfreetype-9.4.lib
vtkGeovisCore-9.4.lib
vtkgl2ps-9.4.lib
vtkglad-9.4.lib
vtkhdf5-9.4.lib
vtkhdf5_hl-9.4.lib
vtkImagingColor-9.4.lib
vtkImagingCore-9.4.lib
vtkImagingFourier-9.4.lib
vtkImagingGeneral-9.4.lib
vtkImagingHybrid-9.4.lib
vtkImagingMath-9.4.lib
vtkImagingMorphological-9.4.lib
vtkImagingSources-9.4.lib
vtkImagingStatistics-9.4.lib
vtkImagingStencil-9.4.lib
vtkInfovisCore-9.4.lib
vtkInfovisLayout-9.4.lib
vtkInteractionImage-9.4.lib
vtkInteractionStyle-9.4.lib
vtkInteractionWidgets-9.4.lib
vtkIOAMR-9.4.lib
vtkIOAsynchronous-9.4.lib
vtkIOCellGrid-9.4.lib
vtkIOCesium3DTiles-9.4.lib
vtkIOCGNSReader-9.4.lib
vtkIOChemistry-9.4.lib
vtkIOCityGML-9.4.lib
vtkIOCONVERGECFD-9.4.lib
vtkIOCore-9.4.lib
vtkIOEngys-9.4.lib
vtkIOEnSight-9.4.lib
vtkIOERF-9.4.lib
vtkIOExodus-9.4.lib
vtkIOExport-9.4.lib
vtkIOExportGL2PS-9.4.lib
vtkIOExportPDF-9.4.lib
vtkIOFDS-9.4.lib
vtkIOFLUENTCFF-9.4.lib
vtkIOGeometry-9.4.lib
vtkIOHDF-9.4.lib
vtkIOImage-9.4.lib
vtkIOImport-9.4.lib
vtkIOInfovis-9.4.lib
vtkIOIOSS-9.4.lib
vtkIOLegacy-9.4.lib
vtkIOLSDyna-9.4.lib
vtkIOMINC-9.4.lib
vtkIOMotionFX-9.4.lib
vtkIOMovie-9.4.lib
vtkIONetCDF-9.4.lib
vtkIOOggTheora-9.4.lib
vtkIOParallel-9.4.lib
vtkIOParallelXML-9.4.lib
vtkIOPLY-9.4.lib
vtkIOSegY-9.4.lib
vtkIOSQL-9.4.lib
vtkioss-9.4.lib
vtkIOTecplotTable-9.4.lib
vtkIOVeraOut-9.4.lib
vtkIOVideo-9.4.lib
vtkIOXML-9.4.lib
vtkIOXMLParser-9.4.lib
vtkjpeg-9.4.lib
vtkjsoncpp-9.4.lib
vtkkissfft-9.4.lib
vtklibharu-9.4.lib
vtklibproj-9.4.lib
vtklibxml2-9.4.lib
vtkloguru-9.4.lib
vtklz4-9.4.lib
vtklzma-9.4.lib
vtkmetaio-9.4.lib
vtknetcdf-9.4.lib
vtkogg-9.4.lib
vtkParallelCore-9.4.lib
vtkParallelDIY-9.4.lib
vtkpng-9.4.lib
vtkpugixml-9.4.lib
vtkRenderingAnnotation-9.4.lib
vtkRenderingCellGrid-9.4.lib
vtkRenderingContext2D-9.4.lib
vtkRenderingContextOpenGL2-9.4.lib
vtkRenderingCore-9.4.lib
vtkRenderingFreeType-9.4.lib
vtkRenderingGL2PSOpenGL2-9.4.lib
vtkRenderingHyperTreeGrid-9.4.lib
vtkRenderingImage-9.4.lib
vtkRenderingLabel-9.4.lib
vtkRenderingLICOpenGL2-9.4.lib
vtkRenderingLOD-9.4.lib
vtkRenderingOpenGL2-9.4.lib
vtkRenderingSceneGraph-9.4.lib
vtkRenderingUI-9.4.lib
vtkRenderingVolume-9.4.lib
vtkRenderingVolumeOpenGL2-9.4.lib
vtkRenderingVtkJS-9.4.lib
vtksqlite-9.4.lib
vtksys-9.4.lib
vtkTestingCore-9.4.lib
vtkTestingRendering-9.4.lib
vtktheora-9.4.lib
vtktiff-9.4.lib
vtktoken-9.4.lib
vtkverdict-9.4.lib
vtkViewsContext2D-9.4.lib
vtkViewsCore-9.4.lib
vtkViewsInfovis-9.4.lib
vtkWrappingTools-9.4.lib
vtkzlib-9.4.lib

还是那句话,这个只适用于1.15版本 ,1.14需要你们自己获取,否则就会配置错误!!!

配置

17、配置完成

完成配置

18、保存配置

保存

19、打开解决方案管理器

解决方案

20、点击属性并编辑环境

在这里插入图片描述

编辑环境

点进入,然后将下面这一段复制下来:

PATH=(PCL_ROOT)\bin;(PCL_ROOT)\3rdParty\FLANN\bin;(PCL_ROOT)\3rdParty\VTK\bin;(PCL_ROOT)\3rdParty\Qhull\bin;C:\Program Files\OpenNI2\Tools;$(PATH)

点击确定…

确定

21、完成配置

确定

22、重新打开属性管理器

新的项目表

23、添加新的项目表

新的表

24、重复9到15步

22、配置附加依赖项

附加依赖项

然后还是和上面一样,小编提供了这个代码:

import os


def extract_files_by_extension(folder_path, target_extension, output_file, exclude_string=None):
    """
    从指定文件夹中提取特定扩展名的文件路径,并保存到文本文件中。

    :param folder_path: 要扫描的文件夹路径
    :param target_extension: 目标扩展名(例如 '.txt' 或 '.jpg')
    :param output_file: 保存结果的文件路径
    :param exclude_string: 排除包含该字符串的文件(可选,默认为None表示不排除)
    """
    # 1. 初始化存储列表
    matched_files = []


    print(f"正在扫描文件夹: {folder_path}")
    print(f"查找扩展名: {target_extension}")
    if exclude_string:
        print(f"排除包含字符串: {exclude_string}")

    # 3. 遍历目录
    for filename in os.listdir(folder_path):
        # 先检查扩展名
        if filename.endswith(target_extension):
            if exclude_string and exclude_string in filename:
                matched_files.append(filename)  # 跳过不包含排除字符串的文件

    # 4. 保存结果到文件
    if matched_files:
        try:
            with open(output_file, 'w', encoding='utf-8') as f:
                for filename in matched_files:
                    # 每个元素占一行
                    f.write(filename + '\n')
            print(f"成功!共找到 {len(matched_files)} 个文件。")
            print(f"结果已保存至: {output_file}")
        except IOError as e:
            print(f"保存文件时出错: {e}")
    else:
        print("未找到匹配的文件。")


# ================= 使用示例 =================
if __name__ == "__main__":
    # 配置参数(请根据实际情况修改以下路径)
    target_folder = r"地址"
    ext = ".lib"
    save_file = "输出文件.txt"

    # 新增:排除包含此字符串的文件
    exclude_str = "-gd"  # 设置为 None 或 "" 表示不排除任何文件

    # 检查文件夹是否存在
    if os.path.exists(target_folder):
        extract_files_by_extension(target_folder, ext, save_file, exclude_str)
    else:
        print(f"错误:文件夹路径不存在 -> {target_folder}")

还是一样,设置地址,小编这里是D:\PCL\PCL 1.15.0\3rdParty\VTK\lib,还有输出文件名,如text3.txt。

运行结束后,重新设置地址,小编是D:\PCL\PCL 1.15.0\lib,然后修设置变量exclude_str为“d.lib”,然后设置输出文件,比如text4.txt。

结果就是:

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
vtkcgns-9.4-gd.lib
vtkChartsCore-9.4-gd.lib
vtkCommonColor-9.4-gd.lib
vtkCommonComputationalGeometry-9.4-gd.lib
vtkCommonCore-9.4-gd.lib
vtkCommonDataModel-9.4-gd.lib
vtkCommonExecutionModel-9.4-gd.lib
vtkCommonMath-9.4-gd.lib
vtkCommonMisc-9.4-gd.lib
vtkCommonSystem-9.4-gd.lib
vtkCommonTransforms-9.4-gd.lib
vtkDICOMParser-9.4-gd.lib
vtkDomainsChemistry-9.4-gd.lib
vtkDomainsChemistryOpenGL2-9.4-gd.lib
vtkdoubleconversion-9.4-gd.lib
vtkexodusII-9.4-gd.lib
vtkexpat-9.4-gd.lib
vtkFiltersAMR-9.4-gd.lib
vtkFiltersCellGrid-9.4-gd.lib
vtkFiltersCore-9.4-gd.lib
vtkFiltersExtraction-9.4-gd.lib
vtkFiltersFlowPaths-9.4-gd.lib
vtkFiltersGeneral-9.4-gd.lib
vtkFiltersGeneric-9.4-gd.lib
vtkFiltersGeometry-9.4-gd.lib
vtkFiltersGeometryPreview-9.4-gd.lib
vtkFiltersHybrid-9.4-gd.lib
vtkFiltersHyperTree-9.4-gd.lib
vtkFiltersImaging-9.4-gd.lib
vtkFiltersModeling-9.4-gd.lib
vtkFiltersParallel-9.4-gd.lib
vtkFiltersParallelImaging-9.4-gd.lib
vtkFiltersPoints-9.4-gd.lib
vtkFiltersProgrammable-9.4-gd.lib
vtkFiltersReduction-9.4-gd.lib
vtkFiltersSelection-9.4-gd.lib
vtkFiltersSMP-9.4-gd.lib
vtkFiltersSources-9.4-gd.lib
vtkFiltersStatistics-9.4-gd.lib
vtkFiltersTemporal-9.4-gd.lib
vtkFiltersTensor-9.4-gd.lib
vtkFiltersTexture-9.4-gd.lib
vtkFiltersTopology-9.4-gd.lib
vtkFiltersVerdict-9.4-gd.lib
vtkfmt-9.4-gd.lib
vtkfreetype-9.4-gd.lib
vtkGeovisCore-9.4-gd.lib
vtkgl2ps-9.4-gd.lib
vtkglad-9.4-gd.lib
vtkhdf5-9.4-gd.lib
vtkhdf5_hl-9.4-gd.lib
vtkImagingColor-9.4-gd.lib
vtkImagingCore-9.4-gd.lib
vtkImagingFourier-9.4-gd.lib
vtkImagingGeneral-9.4-gd.lib
vtkImagingHybrid-9.4-gd.lib
vtkImagingMath-9.4-gd.lib
vtkImagingMorphological-9.4-gd.lib
vtkImagingSources-9.4-gd.lib
vtkImagingStatistics-9.4-gd.lib
vtkImagingStencil-9.4-gd.lib
vtkInfovisCore-9.4-gd.lib
vtkInfovisLayout-9.4-gd.lib
vtkInteractionImage-9.4-gd.lib
vtkInteractionStyle-9.4-gd.lib
vtkInteractionWidgets-9.4-gd.lib
vtkIOAMR-9.4-gd.lib
vtkIOAsynchronous-9.4-gd.lib
vtkIOCellGrid-9.4-gd.lib
vtkIOCesium3DTiles-9.4-gd.lib
vtkIOCGNSReader-9.4-gd.lib
vtkIOChemistry-9.4-gd.lib
vtkIOCityGML-9.4-gd.lib
vtkIOCONVERGECFD-9.4-gd.lib
vtkIOCore-9.4-gd.lib
vtkIOEngys-9.4-gd.lib
vtkIOEnSight-9.4-gd.lib
vtkIOERF-9.4-gd.lib
vtkIOExodus-9.4-gd.lib
vtkIOExport-9.4-gd.lib
vtkIOExportGL2PS-9.4-gd.lib
vtkIOExportPDF-9.4-gd.lib
vtkIOFDS-9.4-gd.lib
vtkIOFLUENTCFF-9.4-gd.lib
vtkIOGeometry-9.4-gd.lib
vtkIOHDF-9.4-gd.lib
vtkIOImage-9.4-gd.lib
vtkIOImport-9.4-gd.lib
vtkIOInfovis-9.4-gd.lib
vtkIOIOSS-9.4-gd.lib
vtkIOLegacy-9.4-gd.lib
vtkIOLSDyna-9.4-gd.lib
vtkIOMINC-9.4-gd.lib
vtkIOMotionFX-9.4-gd.lib
vtkIOMovie-9.4-gd.lib
vtkIONetCDF-9.4-gd.lib
vtkIOOggTheora-9.4-gd.lib
vtkIOParallel-9.4-gd.lib
vtkIOParallelXML-9.4-gd.lib
vtkIOPLY-9.4-gd.lib
vtkIOSegY-9.4-gd.lib
vtkIOSQL-9.4-gd.lib
vtkioss-9.4-gd.lib
vtkIOTecplotTable-9.4-gd.lib
vtkIOVeraOut-9.4-gd.lib
vtkIOVideo-9.4-gd.lib
vtkIOXML-9.4-gd.lib
vtkIOXMLParser-9.4-gd.lib
vtkjpeg-9.4-gd.lib
vtkjsoncpp-9.4-gd.lib
vtkkissfft-9.4-gd.lib
vtklibharu-9.4-gd.lib
vtklibproj-9.4-gd.lib
vtklibxml2-9.4-gd.lib
vtkloguru-9.4-gd.lib
vtklz4-9.4-gd.lib
vtklzma-9.4-gd.lib
vtkmetaio-9.4-gd.lib
vtknetcdf-9.4-gd.lib
vtkogg-9.4-gd.lib
vtkParallelCore-9.4-gd.lib
vtkParallelDIY-9.4-gd.lib
vtkpng-9.4-gd.lib
vtkpugixml-9.4-gd.lib
vtkRenderingAnnotation-9.4-gd.lib
vtkRenderingCellGrid-9.4-gd.lib
vtkRenderingContext2D-9.4-gd.lib
vtkRenderingContextOpenGL2-9.4-gd.lib
vtkRenderingCore-9.4-gd.lib
vtkRenderingFreeType-9.4-gd.lib
vtkRenderingGL2PSOpenGL2-9.4-gd.lib
vtkRenderingHyperTreeGrid-9.4-gd.lib
vtkRenderingImage-9.4-gd.lib
vtkRenderingLabel-9.4-gd.lib
vtkRenderingLICOpenGL2-9.4-gd.lib
vtkRenderingLOD-9.4-gd.lib
vtkRenderingOpenGL2-9.4-gd.lib
vtkRenderingSceneGraph-9.4-gd.lib
vtkRenderingUI-9.4-gd.lib
vtkRenderingVolume-9.4-gd.lib
vtkRenderingVolumeOpenGL2-9.4-gd.lib
vtkRenderingVtkJS-9.4-gd.lib
vtksqlite-9.4-gd.lib
vtksys-9.4-gd.lib
vtkTestingCore-9.4-gd.lib
vtkTestingRendering-9.4-gd.lib
vtktheora-9.4-gd.lib
vtktiff-9.4-gd.lib
vtktoken-9.4-gd.lib
vtkverdict-9.4-gd.lib
vtkViewsContext2D-9.4-gd.lib
vtkViewsCore-9.4-gd.lib
vtkViewsInfovis-9.4-gd.lib
vtkWrappingTools-9.4-gd.lib
vtkzlib-9.4-gd.lib

然后像16步那样,复制进去然后点击确定,然后保存这个文件,这样就完成了所有的配置工作啦!

六、最后的检验

复制代码,在你的项目里面:

#include <iostream>
#include <vector>
#include <ctime>
#include <pcl/point_cloud.h>
#include <pcl/octree/octree.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>
using namespace std;
int main(int argc, char** argv)
{
	srand((unsigned int)time(NULL));
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	// 创建点云数据
	cloud->width = 1000;
	cloud->height = 1;
	cloud->points.resize(cloud->width * cloud->height);
	for (size_t i = 0; i < cloud->points.size(); ++i)
	{
		cloud->points[i].x = 1024.0f * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].y = 1024.0f * rand() / (RAND_MAX + 1.0f);
		cloud->points[i].z = 1024.0f * rand() / (RAND_MAX + 1.0f);
	}

	pcl::octree::OctreePointCloudSearch<pcl::PointXYZ> octree(0.1);
	octree.setInputCloud(cloud);
	octree.addPointsFromInputCloud();
	pcl::PointXYZ searchPoint;
	searchPoint.x = 1024.0f * rand() / (RAND_MAX + 1.0f);
	searchPoint.y = 1024.0f * rand() / (RAND_MAX + 1.0f);
	searchPoint.z = 1024.0f * rand() / (RAND_MAX + 1.0f);

	//半径内近邻搜索
	vector<int>pointIdxRadiusSearch;
	vector<float>pointRadiusSquaredDistance;
	float radius = 256.0f * rand() / (RAND_MAX + 1.0f);
	cout << "Neighbors within radius search at (" << searchPoint.x
		<< " " << searchPoint.y
		<< " " << searchPoint.z
		<< ") with radius=" << radius << endl;
	if (octree.radiusSearch(searchPoint, radius, pointIdxRadiusSearch, pointRadiusSquaredDistance) > 0)
	{
		for (size_t i = 0; i < pointIdxRadiusSearch.size(); ++i)
			cout << "    " << cloud->points[pointIdxRadiusSearch[i]].x
			<< " " << cloud->points[pointIdxRadiusSearch[i]].y
			<< " " << cloud->points[pointIdxRadiusSearch[i]].z
			<< " (squared distance: " << pointRadiusSquaredDistance[i] << ")" << endl;
	}
	// 初始化点云可视化对象
	boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("显示点云"));
	viewer->setBackgroundColor(0, 0, 0);  //设置背景颜色为黑色
	// 对点云着色可视化 (red).
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ>target_color(cloud, 255, 0, 0);
	viewer->addPointCloud<pcl::PointXYZ>(cloud, target_color, "target cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "target cloud");

	// 等待直到可视化窗口关闭
	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(1000));
	}

	return (0);
}

建立cpp文件

然后创建好你的代码文件,将这个代码复制进去,然后点击调试:

调试代码

如果运行成功,就说明配置成功了!

运行结果图

七、小结

这是前面说的配置包含目录的地址:
D:\PCL\PCL 1.15.0\include\pcl-1.15
D:\PCL\PCL 1.15.0\3rdParty\Boost\include\boost-1_87
D:\PCL\PCL 1.15.0\3rdParty\Eigen3\include\eigen3
D:\PCL\PCL 1.15.0\3rdParty\FLANN\include
D:\PCL\PCL 1.15.0\3rdParty\Qhull\include
D:\PCL\PCL 1.15.0\3rdParty\VTK\include\vtk-9.4
C:\Program Files\OpenNI2\Include

库目录的地址:
D:\PCL\PCL 1.15.0\lib
D:\PCL\PCL 1.15.0\3rdParty\Boost\lib
D:\PCL\PCL 1.15.0\3rdParty\FLANN\lib
D:\PCL\PCL 1.15.0\3rdParty\Qhull\lib
D:\PCL\PCL 1.15.0\3rdParty\VTK\lib
C:\Program Files\OpenNI2\Lib

确保你的版本号,以及下载的位置是一样的,然后再复制!!!

现在,已经完成了PCL的开发环境的搭建,这下就可以使用PCL自己编写相关项目了。

计算机小白,第一个创作稿件。
制作不易,还请留下关注再走鸭。求求了(> _ <)!!!

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值