3D点云之PCL学习之路(一)

由于种种原因,又要进行3D点云的相关开发任务。对比了PCL和Open3D,针对应用的具体环境,最后还是决定基于PCL进行开发。如果觉得有所帮助,欢迎各位转发收藏~


首先进行开发环境的搭建(如果对于环境搭建配置已经非常熟练,建议查看下一章节)。

软件环境:Win10,MSVC2019,QT6.4.0,PCL1.12.1。

一.PCL安装与配置

应用2019可以使用PCL-1.12.1-AllInOne-msvc2019-win64.exe.这样可方便3rdParty的使用。PCL1.12.1下载:https://github.com/PointCloudLibrary/pcl/releases.安装过程直接进行下一步,进行即可。不建议安装到program files,也不要安装在含有中文路径下,这样后期使用QT的时候会比较舒适。安装完值后查看3rdParty\OpenNI2,看一下这个有没有安装上,没安装上直接运行.exe就可以了,建议安装到3rdParty\OpenNI2,后期使用起来也比较舒适。(注,有的时候会生成找不到 OpenNI2.dll 的错误,可以直接把这个复制到生成的工程目录.exe下即可。)

1.系统环境的配置:

 点击path,编辑环境变量

 一切妥当后,注销(重启)一下电脑,使得环境变量生效。

2.工程环境的配置

利用msvc2019新建工程,选择项目->(项目名称)属性

修改包含目录和库目录的内容

 包含目录:

C:\3DApp\PCL1.12.1\include\pcl-1.12
C:\3DApp\PCL1.12.1\3rdParty\Boost\include\boost-1_78
C:\3DApp\PCL1.12.1\3rdParty\Eigen\eigen3
C:\3DApp\PCL1.12.1\3rdParty\FLANN\include
C:\3DApp\PCL1.12.1\3rdParty\OpenNI2\Include
C:\3DApp\PCL1.12.1\3rdParty\Qhull\include
C:\3DApp\PCL1.12.1\3rdParty\VTK\include\vtk-9.1

库目录:

C:\3DApp\PCL1.12.1\lib
C:\3DApp\PCL1.12.1\3rdParty\Boost\lib
C:\3DApp\PCL1.12.1\3rdParty\FLANN\lib
C:\3DApp\PCL1.12.1\3rdParty\OpenNI2\Lib
C:\3DApp\PCL1.12.1\3rdParty\Qhull\lib
C:\3DApp\PCL1.12.1\3rdParty\VTK\lib

 再选择连接器->库目录->附加依赖项,添加如下内容(debug)

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
libboost_atomic-vc142-mt-gd-x64-1_78.lib
libboost_bzip2-vc142-mt-gd-x64-1_78.lib
libboost_chrono-vc142-mt-gd-x64-1_78.lib
libboost_container-vc142-mt-gd-x64-1_78.lib
libboost_context-vc142-mt-gd-x64-1_78.lib
libboost_contract-vc142-mt-gd-x64-1_78.lib
libboost_coroutine-vc142-mt-gd-x64-1_78.lib
libboost_date_time-vc142-mt-gd-x64-1_78.lib
libboost_exception-vc142-mt-gd-x64-1_78.lib
libboost_filesystem-vc142-mt-gd-x64-1_78.lib
libboost_graph-vc142-mt-gd-x64-1_78.lib
libboost_graph_parallel-vc142-mt-gd-x64-1_78.lib
libboost_iostreams-vc142-mt-gd-x64-1_78.lib
libboost_json-vc142-mt-gd-x64-1_78.lib
libboost_locale-vc142-mt-gd-x64-1_78.lib
libboost_log-vc142-mt-gd-x64-1_78.lib
libboost_log_setup-vc142-mt-gd-x64-1_78.lib
libboost_math_c99-vc142-mt-gd-x64-1_78.lib
libboost_math_c99f-vc142-mt-gd-x64-1_78.lib
libboost_math_c99l-vc142-mt-gd-x64-1_78.lib
libboost_math_tr1-vc142-mt-gd-x64-1_78.lib
libboost_math_tr1f-vc142-mt-gd-x64-1_78.lib
libboost_math_tr1l-vc142-mt-gd-x64-1_78.lib
libboost_mpi-vc142-mt-gd-x64-1_78.lib
libboost_nowide-vc142-mt-gd-x64-1_78.lib
libboost_numpy38-vc142-mt-gd-x64-1_78.lib
libboost_prg_exec_monitor-vc142-mt-gd-x64-1_78.lib
libboost_program_options-vc142-mt-gd-x64-1_78.lib
libboost_python38-vc142-mt-gd-x64-1_78.lib
libboost_random-vc142-mt-gd-x64-1_78.lib
libboost_regex-vc142-mt-gd-x64-1_78.lib
libboost_serialization-vc142-mt-gd-x64-1_78.lib
libboost_system-vc142-mt-gd-x64-1_78.lib
libboost_test_exec_monitor-vc142-mt-gd-x64-1_78.lib
libboost_thread-vc142-mt-gd-x64-1_78.lib
libboost_timer-vc142-mt-gd-x64-1_78.lib
libboost_type_erasure-vc142-mt-gd-x64-1_78.lib
libboost_unit_test_framework-vc142-mt-gd-x64-1_78.lib
libboost_wave-vc142-mt-gd-x64-1_78.lib
libboost_wserialization-vc142-mt-gd-x64-1_78.lib
libboost_zlib-vc142-mt-gd-x64-1_78.lib
flann-gd.lib
flann_cpp-gd.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
OpenNI2.lib
qhullcpp_d.lib
qhullstatic_d.lib
qhullstatic_rd.lib
qhull_rd.lib
vtkcgns-9.1d.lib
vtkChartsCore-9.1d.lib
vtkCommonColor-9.1d.lib
vtkCommonComputationalGeometry-9.1d.lib
vtkCommonCore-9.1d.lib
vtkCommonDataModel-9.1d.lib
vtkCommonExecutionModel-9.1d.lib
vtkCommonMath-9.1d.lib
vtkCommonMisc-9.1d.lib
vtkCommonSystem-9.1d.lib
vtkCommonTransforms-9.1d.lib
vtkDICOMParser-9.1d.lib
vtkDomainsChemistry-9.1d.lib
vtkDomainsChemistryOpenGL2-9.1d.lib
vtkdoubleconversion-9.1d.lib
vtkexodusII-9.1d.lib
vtkexpat-9.1d.lib
vtkFiltersAMR-9.1d.lib
vtkFiltersCore-9.1d.lib
vtkFiltersExtraction-9.1d.lib
vtkFiltersFlowPaths-9.1d.lib
vtkFiltersGeneral-9.1d.lib
vtkFiltersGeneric-9.1d.lib
vtkFiltersGeometry-9.1d.lib
vtkFiltersHybrid-9.1d.lib
vtkFiltersHyperTree-9.1d.lib
vtkFiltersImaging-9.1d.lib
vtkFiltersModeling-9.1d.lib
vtkFiltersParallel-9.1d.lib
vtkFiltersParallelImaging-9.1d.lib
vtkFiltersPoints-9.1d.lib
vtkFiltersProgrammable-9.1d.lib
vtkFiltersSelection-9.1d.lib
vtkFiltersSMP-9.1d.lib
vtkFiltersSources-9.1d.lib
vtkFiltersStatistics-9.1d.lib
vtkFiltersTexture-9.1d.lib
vtkFiltersTopology-9.1d.lib
vtkFiltersVerdict-9.1d.lib
vtkfmt-9.1d.lib
vtkfreetype-9.1d.lib
vtkGeovisCore-9.1d.lib
vtkgl2ps-9.1d.lib
vtkglew-9.1d.lib
vtkhdf5-9.1d.lib
vtkhdf5_hl-9.1d.lib
vtkImagingColor-9.1d.lib
vtkImagingCore-9.1d.lib
vtkImagingFourier-9.1d.lib
vtkImagingGeneral-9.1d.lib
vtkImagingHybrid-9.1d.lib
vtkImagingMath-9.1d.lib
vtkImagingMorphological-9.1d.lib
vtkImagingSources-9.1d.lib
vtkImagingStatistics-9.1d.lib
vtkImagingStencil-9.1d.lib
vtkInfovisCore-9.1d.lib
vtkInfovisLayout-9.1d.lib
vtkInteractionImage-9.1d.lib
vtkInteractionStyle-9.1d.lib
vtkInteractionWidgets-9.1d.lib
vtkIOAMR-9.1d.lib
vtkIOAsynchronous-9.1d.lib
vtkIOCGNSReader-9.1d.lib
vtkIOChemistry-9.1d.lib
vtkIOCityGML-9.1d.lib
vtkIOCONVERGECFD-9.1d.lib
vtkIOCore-9.1d.lib
vtkIOEnSight-9.1d.lib
vtkIOExodus-9.1d.lib
vtkIOExport-9.1d.lib
vtkIOExportGL2PS-9.1d.lib
vtkIOExportPDF-9.1d.lib
vtkIOGeometry-9.1d.lib
vtkIOHDF-9.1d.lib
vtkIOImage-9.1d.lib
vtkIOImport-9.1d.lib
vtkIOInfovis-9.1d.lib
vtkIOIOSS-9.1d.lib
vtkIOLegacy-9.1d.lib
vtkIOLSDyna-9.1d.lib
vtkIOMINC-9.1d.lib
vtkIOMotionFX-9.1d.lib
vtkIOMovie-9.1d.lib
vtkIONetCDF-9.1d.lib
vtkIOOggTheora-9.1d.lib
vtkIOParallel-9.1d.lib
vtkIOParallelXML-9.1d.lib
vtkIOPLY-9.1d.lib
vtkIOSegY-9.1d.lib
vtkIOSQL-9.1d.lib
vtkioss-9.1d.lib
vtkIOTecplotTable-9.1d.lib
vtkIOVeraOut-9.1d.lib
vtkIOVideo-9.1d.lib
vtkIOXML-9.1d.lib
vtkIOXMLParser-9.1d.lib
vtkjpeg-9.1d.lib
vtkjsoncpp-9.1d.lib
vtkkissfft-9.1d.lib
vtklibharu-9.1d.lib
vtklibproj-9.1d.lib
vtklibxml2-9.1d.lib
vtkloguru-9.1d.lib
vtklz4-9.1d.lib
vtklzma-9.1d.lib
vtkmetaio-9.1d.lib
vtknetcdf-9.1d.lib
vtkogg-9.1d.lib
vtkParallelCore-9.1d.lib
vtkParallelDIY-9.1d.lib
vtkpng-9.1d.lib
vtkpugixml-9.1d.lib
vtkRenderingAnnotation-9.1d.lib
vtkRenderingContext2D-9.1d.lib
vtkRenderingContextOpenGL2-9.1d.lib
vtkRenderingCore-9.1d.lib
vtkRenderingFreeType-9.1d.lib
vtkRenderingGL2PSOpenGL2-9.1d.lib
vtkRenderingImage-9.1d.lib
vtkRenderingLabel-9.1d.lib
vtkRenderingLOD-9.1d.lib
vtkRenderingOpenGL2-9.1d.lib
vtkRenderingSceneGraph-9.1d.lib
vtkRenderingUI-9.1d.lib
vtkRenderingVolume-9.1d.lib
vtkRenderingVolumeOpenGL2-9.1d.lib
vtkRenderingVtkJS-9.1d.lib
vtksqlite-9.1d.lib
vtksys-9.1d.lib
vtkTestingRendering-9.1d.lib
vtktheora-9.1d.lib
vtktiff-9.1d.lib
vtkverdict-9.1d.lib
vtkViewsContext2D-9.1d.lib
vtkViewsCore-9.1d.lib
vtkViewsInfovis-9.1d.lib
vtkWrappingTools-9.1d.lib
vtkzlib-9.1d.lib

release模式基本一样(就是lib去掉了d)

配置好以上内容,就可以进行一个简单的PCL的载入与展示了。

#define _SCL_SECURE_NO_WARNINGS
#ifndef _CRT_SECURE_NO_WARNINGS
#include <pcl/point_types.h> 
#include <pcl/ModelCoefficients.h>  
#include <pcl/filters/project_inliers.h> 
#include <pcl/io/pcd_io.h>  
#include <pcl/io/ply_io.h>
#include <pcl/point_cloud.h>
#include <pcl/console/parse.h>
#include <pcl/common/transforms.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/point_types.h>
#include <iostream> 
#include <vector>
#include <memory>
#include <string>
#include "vtkAutoInit.h"
#include <vtkOutputWindow.h>


int main()
{
    vtkOutputWindow::GlobalWarningDisplayOff();    //vtkOutputWindow::SetGlobalWarningDisplay(0); 

    pcl::PointCloud<pcl::PointXYZ>::Ptr source_cloud(new pcl::PointCloud<pcl::PointXYZ>());
    if (pcl::io::loadPLYFile("c:\\fragment.ply", *source_cloud) == -1)
    {
        PCL_ERROR("Couldn't read fragment.ply\n");
        return -1;
    }

    pcl::visualization::PCLVisualizer viewer("Matrix transformation example");
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> source_cloud_color_handler(source_cloud, 255, 255, 255);
    viewer.addPointCloud(source_cloud, source_cloud_color_handler, "original_cloud");


    viewer.addCoordinateSystem(1.0, "cloud", 0);
    viewer.setBackgroundColor(0.05, 0.05, 0.05, 0); // Setting background to a dark grey
    viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "original_cloud");

    viewer.resetCamera();

    while (!viewer.wasStopped()) 
   { 
        viewer.spinOnce();
    }
    return EXIT_SUCCESS;
}


不出什么意外就可以看到结果了.

二.vtk9.1的编译

其实如果不用qt,pcl自带的3rdParty内的vtk是已经够用了。如果需要结合qt使用,就需要进行重新编译了。

 Download | VTK

将下载后的原文件解压到VTK-9.1.0-src

 

 点击Configure观察结果。
其中CMAKE_INSTALL_PREFIX是VTK 库要安装的位置,VTK 编译后生成的库文件所在位置,将位置修改为VTK-9.1.0-install-debug, 在后续的生成中,先生成Release版本的VTK库,生成后将生成的文件移动到VTK-9.1.0-install-release,然后生成Debug版本的VTK库,此时生成的文件就存放于VTK-9.1.0-install-debug文件夹中。接下来在搜框内搜索QT,vtk项的qt都选择want,设置qt版本为6. 点击Configure进行相关内容的设置,其中

Qt6QmlCompilerPlusPrivate_dir这项始终无法设置,不过对后期应用影响不大。要是有哪位知道如何设置的,可以私信。我修改一下这个内容。先行谢过。 再点击Configure,如果没有错误,就可以Generate。Generate done以后,Open Project选择2019进行打开。选择 生成->批生成,在出现的界面中选择ALL_BUILD的Release版本,点击生成后等待生成完成,再选择 生成->批生成,去掉ALL_BUILD的Release,选择INSTALL的Release版,再点击生成后等待生成完成。这样Release已经编译好了,存放在debug文件夹下,需要手动移动到release文件夹下。同样再选择 生成->批生成,取消INSTALL的Release版,并同时勾选ALL_BUILD的debug和INSTALL的debug再点击生成后等待生成完成。到此编译的内容基本完毕。这时,备份PCL1.12.1\3rdParty\VTK内容后可以将VTK-9.1.0-install-debug和VTK-9.1.0-install-release内容同时复制到PCL1.12.1\3rdParty\VTK下。用以替换原有的vtk。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pcl 点云 pcl 1.11.1 是一个开源的 3D 机器视觉库,用于处理点云数据和进行 3D 数据处理、图像处理和计算几何等复杂的计算任务。它提供了大量的工具和算法,包括点云滤波、分割、重构、注册等,可以用于许多应用领域,如机器人学、自动驾驶、虚拟现实等。 pcl 1.11.1 是 pcl 点云库的最新版本,新增了许多重要的功能和改进,包括支持更多的文件格式、更高效的 I/O 性能、精度更高的运动估计算法、更方便的可视化工具等。此外,它还加入了深度学习相关的功能,如点云到图像的转换、特征提取和分类等,可以更好地支持深度学习应用的开发和实现。 总之,pcl 点云 pcl 1.11.1 是一个功能强大、灵活可扩展的 3D 机器视觉库,适用于各种计算机视觉应用场景。无论是学术研究还是工业应用,都可以通过 pcl 点云库来实现高效、准确的 3D 数据处理和分析。 ### 回答2: PCL (Point Cloud Library) 是一个用于点云处理的开源 C++ 库,支持点云的装载、过滤、特征提取、配准、分割、稠密重建等操作。其最新版本为 PCL 1.11.1,于 2020 年 11 月发布。 PCL 1.11.1 中新增了许多功能和改进,如点云网络处理库 PointNet、全息投影模块、新的欧拉角和旋转矩阵表示、增加了刚体、仿射和投影变换支持等。此外,还改进了 PCL 的核心代码,提高了稳定性、速度和可靠性,修复了许多 bug。 PCL 的应用广泛,包括机器人、自动驾驶、室内外建模、地图构建、医学成像等领域。例如,PCL 可以用于机器人的环境感知,通过融合多种传感器数据获得更准确的环境模型;同时,PCL 也可用于医学图像分析,如三维重建和影像分割等。 总之,PCL 是一个功能强大的开源点云处理库,不断更新和改进,为点云处理和相关领域的研究提供了重要支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值