PCL配置

1、下載

打開GitHub網站,搜索pcl,選擇第一個結果打開,按照下圖步驟操作

下載PCL預編譯安裝程序PCL-1.13.1-AllInOne-msvc2022-win64.exe

和要安裝的PCL組件(例如pcl-1.13.1-pdb-msvc2022-win64.zip)

2、安裝

雙擊?PCL-1.13.1-AllInOne-msvc2022-win64.exe進行安裝。到圖1的步驟時,選擇第二項。

網上找的圖

圖1

下一步, 安裝路徑可以自行修改(我的安裝路徑D:\PCL 1.13.1),之后點擊安裝即可。

一段時間之后,會彈出來一個OpenNI2的安裝窗口,此時將OpenNI2放在3rdparty文件夾里,即D:\PCL 1.13.1\3rdParty\OpenNI2。由于點云在安裝的過程中會把所有的第三方庫全部安裝在點云安裝目錄下的3rdparty文件夾里。因此,為了保持文件夾的整潔,把OpenNI2放在3rdparty文件夾里。

?如果3rdParty文件夾下的OpenNI2內容為空,可以將其移除:在PCL安裝路徑下的3rdParty/OpenNI2文件夾內可以看到安裝包OpenNI-Windows-x64-2.2.msi,雙擊運行,選擇Remove移除安裝再重新安裝即可。

配置PDB文件

將下載得到的壓縮包pcl-1.13.1-pdb-msvc2022-win64.zip解壓縮后將里面的文件復制到PCL安裝目錄下bin文件夾

至此點云庫安裝完成,安裝目錄和3rdparty文件夾如下表所示:

?3、配置環境變量

首先確認OpenNI2的環境變量是否設置正確

?然后打開Path,添加如下

%OPENNI2_REDIST64%
%OPENNI2_LIB64%
%OPENNI2_INCLUDE64%

4、VS 環境配置

4.1 創建項目

新建一個控制臺應用(目錄可以放在pcl的安裝路徑下),建立一個項目屬性表(目的:以后新建一個PCL項目文件直接調用配置好的屬性表,一勞永逸)

?

debug和release配置大體相同,不同的地方后面會提及。?

之后新建項目時就可以加載配置好的屬性表。

?打開vs建立了一個pcl項目的前提下,再次新建項目并導入.props文件,運行該pcl項目可能會失敗。可以重啟vs。

?4.2 配置包含目錄

打開屬性表,配置VC++目錄中的包含目錄。在配置 PCL 包含目錄路徑時,連接符應該使用分號(;),注意路徑之間不要有空格,并且最后一個路徑不需要加分號。

D:\PCL 1.13.1\3rdParty\Boost\include\boost-1_82;D:\PCL 1.13.1\3rdParty\Eigen\eigen3;D:\PCL 1.13.1\3rdParty\FLANN\include;D:\PCL 1.13.1\3rdParty\OpenNI2\Include;D:\PCL 1.13.1\3rdParty\Qhull\include;D:\PCL 1.13.1\3rdParty\VTK\include\vtk-9.2;D:\PCL 1.13.1\include\pcl-1.13

?4.3 配置庫目錄

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

?4.4 配置預處理器

debug模式可以如下配置,release模式只添加后面三項即可

_DEBUG
_CONSOLE
_CRT_SECURE_NO_WARNINGS
BOOST_USE_WINDOWS_H
NOMINMAX
_CRT_SECURE_NO_DEPRECATE
debug模式release模式

?4.5 附加依賴項配置

需要對Boost(92)、VTK(284)、PCL(40)幾個文件夾內lib文件夾內的.lib文件進行提取。Debug是 **d.lib 類型,Release是 *.lib 類型。

提取Boost和VTK中的.lib文件可以用下面的代碼(修改對應的路徑、保存的文件名即可)

import os# 設置 Boost lib 文件夾路徑和要輸出的文本文件名
gd_output_file = "Boost_debug_libs.txt"
non_gd_output_file = "Boost_release_libs.txt"def Extract_lib(boost_lib_path):# 獲取 Boost lib 文件夾下的所有 .lib 文件名all_lib_files = [file for file in os.listdir(boost_lib_path) if file.endswith('.lib')]# 分別篩選包含和不包含 "-gd" 的文件名,并輸出到不同的文本文件中gd_lib_files = [file for file in all_lib_files if '-gd' in file]with open(os.path.join(boost_lib_path, gd_output_file), 'w') as outfile:for gd_file in gd_lib_files:outfile.write(gd_file + '\n')non_gd_lib_files = [file for file in all_lib_files if '-gd' not in file]with open(os.path.join(boost_lib_path, non_gd_output_file), 'w') as outfile:for non_gd_file in non_gd_lib_files:outfile.write(non_gd_file + '\n')if __name__ == '__main__':path = r"D:\PCL 1.13.1\3rdParty\Boost\lib"Extract_lib(path)
import os# 設置 Boost lib 文件夾路徑和要輸出的文本文件名
gd_output_file = "VTK_debug_libs.txt"
non_gd_output_file = "VTK_release_libs.txt"def Extract_lib(boost_lib_path):# 獲取 Boost lib 文件夾下的所有 .lib 文件名all_lib_files = [file for file in os.listdir(boost_lib_path) if file.endswith('.lib')]# 分別篩選包含和不包含 "-gd" 的文件名,并輸出到不同的文本文件中gd_lib_files = [file for file in all_lib_files if '-gd' in file]with open(os.path.join(boost_lib_path, gd_output_file), 'w') as outfile:for gd_file in gd_lib_files:outfile.write(gd_file + '\n')non_gd_lib_files = [file for file in all_lib_files if '-gd' not in file]with open(os.path.join(boost_lib_path, non_gd_output_file), 'w') as outfile:for non_gd_file in non_gd_lib_files:outfile.write(non_gd_file + '\n')if __name__ == '__main__':path = r"D:\PCL 1.13.1\3rdParty\VTK\lib"Extract_lib(path)

?提取pcl安裝路徑下lib文件夾內的.lib文件

import os# 設置 Boost lib 文件夾路徑和要輸出的文本文件名
gd_output_file = "pcl_debug_libs.txt"
non_gd_output_file = "pcl_release_libs.txt"def Extract_lib(boost_lib_path):# 獲取 Boost lib 文件夾下的所有 .lib 文件名all_lib_files = [file for file in os.listdir(boost_lib_path) if file.endswith('.lib')]# 分別篩選包含和不包含 "-gd" 的文件名,并輸出到不同的文本文件中gd_lib_files = [file for file in all_lib_files if 'd.lib' in file]with open(os.path.join(boost_lib_path, gd_output_file), 'w') as outfile:for gd_file in gd_lib_files:outfile.write(gd_file + '\n')non_gd_lib_files = [file for file in all_lib_files if 'd.lib' not in file]with open(os.path.join(boost_lib_path, non_gd_output_file), 'w') as outfile:for non_gd_file in non_gd_lib_files:outfile.write(non_gd_file + '\n')if __name__ == '__main__':path = r"D:\PCL 1.13.1\lib"Extract_lib(path)

提取FLANN(8)和Qhull(8)

import os# 設置 Boost lib 文件夾路徑和要輸出的文本文件名
gd_output_file = "FLANN_debug_libs.txt"
non_gd_output_file = "FLANN_release_libs.txt"def Extract_lib(boost_lib_path):# 獲取 Boost lib 文件夾下的所有 .lib 文件名all_lib_files = [file for file in os.listdir(boost_lib_path) if file.endswith('.lib')]# 分別篩選包含和不包含 "-gd" 的文件名,并輸出到不同的文本文件中gd_lib_files = [file for file in all_lib_files if '-gd' in file]with open(os.path.join(boost_lib_path, gd_output_file), 'w') as outfile:for gd_file in gd_lib_files:outfile.write(gd_file + '\n')non_gd_lib_files = [file for file in all_lib_files if '-gd' not in file]with open(os.path.join(boost_lib_path, non_gd_output_file), 'w') as outfile:for non_gd_file in non_gd_lib_files:outfile.write(non_gd_file + '\n')if __name__ == '__main__':path = r"D:\PCL 1.13.1\3rdParty\FLANN\lib"Extract_lib(path)
import os# 設置 Boost lib 文件夾路徑和要輸出的文本文件名
gd_output_file = "Qhull_debug_libs.txt"
non_gd_output_file = "Qhull_release_libs.txt"def Extract_lib(boost_lib_path):# 獲取 Boost lib 文件夾下的所有 .lib 文件名all_lib_files = [file for file in os.listdir(boost_lib_path) if file.endswith('.lib')]# 分別篩選包含和不包含 "-gd" 的文件名,并輸出到不同的文本文件中gd_lib_files = [file for file in all_lib_files if 'd.lib' in file]with open(os.path.join(boost_lib_path, gd_output_file), 'w') as outfile:for gd_file in gd_lib_files:outfile.write(gd_file + '\n')non_gd_lib_files = [file for file in all_lib_files if 'd.lib' not in file]with open(os.path.join(boost_lib_path, non_gd_output_file), 'w') as outfile:for non_gd_file in non_gd_lib_files:outfile.write(non_gd_file + '\n')if __name__ == '__main__':path = r"D:\PCL 1.13.1\3rdParty\Qhull\lib"Extract_lib(path)
4.5.1 debug模式的附加依賴項
libboost_atomic-vc143-mt-gd-x64-1_82.lib
libboost_bzip2-vc143-mt-gd-x64-1_82.lib
libboost_chrono-vc143-mt-gd-x64-1_82.lib
libboost_container-vc143-mt-gd-x64-1_82.lib
libboost_context-vc143-mt-gd-x64-1_82.lib
libboost_contract-vc143-mt-gd-x64-1_82.lib
libboost_coroutine-vc143-mt-gd-x64-1_82.lib
libboost_date_time-vc143-mt-gd-x64-1_82.lib
libboost_exception-vc143-mt-gd-x64-1_82.lib
libboost_fiber-vc143-mt-gd-x64-1_82.lib
libboost_filesystem-vc143-mt-gd-x64-1_82.lib
libboost_graph-vc143-mt-gd-x64-1_82.lib
libboost_graph_parallel-vc143-mt-gd-x64-1_82.lib
libboost_iostreams-vc143-mt-gd-x64-1_82.lib
libboost_json-vc143-mt-gd-x64-1_82.lib
libboost_locale-vc143-mt-gd-x64-1_82.lib
libboost_log-vc143-mt-gd-x64-1_82.lib
libboost_log_setup-vc143-mt-gd-x64-1_82.lib
libboost_math_c99-vc143-mt-gd-x64-1_82.lib
libboost_math_c99f-vc143-mt-gd-x64-1_82.lib
libboost_math_c99l-vc143-mt-gd-x64-1_82.lib
libboost_math_tr1-vc143-mt-gd-x64-1_82.lib
libboost_math_tr1f-vc143-mt-gd-x64-1_82.lib
libboost_math_tr1l-vc143-mt-gd-x64-1_82.lib
libboost_mpi-vc143-mt-gd-x64-1_82.lib
libboost_nowide-vc143-mt-gd-x64-1_82.lib
libboost_numpy310-vc143-mt-gd-x64-1_82.lib
libboost_prg_exec_monitor-vc143-mt-gd-x64-1_82.lib
libboost_program_options-vc143-mt-gd-x64-1_82.lib
libboost_python310-vc143-mt-gd-x64-1_82.lib
libboost_random-vc143-mt-gd-x64-1_82.lib
libboost_regex-vc143-mt-gd-x64-1_82.lib
libboost_serialization-vc143-mt-gd-x64-1_82.lib
libboost_stacktrace_noop-vc143-mt-gd-x64-1_82.lib
libboost_stacktrace_windbg-vc143-mt-gd-x64-1_82.lib
libboost_stacktrace_windbg_cached-vc143-mt-gd-x64-1_82.lib
libboost_system-vc143-mt-gd-x64-1_82.lib
libboost_test_exec_monitor-vc143-mt-gd-x64-1_82.lib
libboost_thread-vc143-mt-gd-x64-1_82.lib
libboost_timer-vc143-mt-gd-x64-1_82.lib
libboost_type_erasure-vc143-mt-gd-x64-1_82.lib
libboost_unit_test_framework-vc143-mt-gd-x64-1_82.lib
libboost_url-vc143-mt-gd-x64-1_82.lib
libboost_wave-vc143-mt-gd-x64-1_82.lib
libboost_wserialization-vc143-mt-gd-x64-1_82.lib
libboost_zlib-vc143-mt-gd-x64-1_82.lib
flann-gd.lib
flann_cpp-gd.lib
flann_cpp_s-gd.lib
flann_s-gd.lib
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
qhullcpp_d.lib
qhullstatic_d.lib
qhullstatic_rd.lib
qhull_rd.lib
vtkcgns-9.2-gd.lib
vtkChartsCore-9.2-gd.lib
vtkCommonColor-9.2-gd.lib
vtkCommonComputationalGeometry-9.2-gd.lib
vtkCommonCore-9.2-gd.lib
vtkCommonDataModel-9.2-gd.lib
vtkCommonExecutionModel-9.2-gd.lib
vtkCommonMath-9.2-gd.lib
vtkCommonMisc-9.2-gd.lib
vtkCommonSystem-9.2-gd.lib
vtkCommonTransforms-9.2-gd.lib
vtkDICOMParser-9.2-gd.lib
vtkDomainsChemistry-9.2-gd.lib
vtkDomainsChemistryOpenGL2-9.2-gd.lib
vtkdoubleconversion-9.2-gd.lib
vtkexodusII-9.2-gd.lib
vtkexpat-9.2-gd.lib
vtkFiltersAMR-9.2-gd.lib
vtkFiltersCore-9.2-gd.lib
vtkFiltersExtraction-9.2-gd.lib
vtkFiltersFlowPaths-9.2-gd.lib
vtkFiltersGeneral-9.2-gd.lib
vtkFiltersGeneric-9.2-gd.lib
vtkFiltersGeometry-9.2-gd.lib
vtkFiltersHybrid-9.2-gd.lib
vtkFiltersHyperTree-9.2-gd.lib
vtkFiltersImaging-9.2-gd.lib
vtkFiltersModeling-9.2-gd.lib
vtkFiltersParallel-9.2-gd.lib
vtkFiltersParallelImaging-9.2-gd.lib
vtkFiltersPoints-9.2-gd.lib
vtkFiltersProgrammable-9.2-gd.lib
vtkFiltersSelection-9.2-gd.lib
vtkFiltersSMP-9.2-gd.lib
vtkFiltersSources-9.2-gd.lib
vtkFiltersStatistics-9.2-gd.lib
vtkFiltersTexture-9.2-gd.lib
vtkFiltersTopology-9.2-gd.lib
vtkFiltersVerdict-9.2-gd.lib
vtkfmt-9.2-gd.lib
vtkfreetype-9.2-gd.lib
vtkGeovisCore-9.2-gd.lib
vtkgl2ps-9.2-gd.lib
vtkglew-9.2-gd.lib
vtkhdf5-9.2-gd.lib
vtkhdf5_hl-9.2-gd.lib
vtkImagingColor-9.2-gd.lib
vtkImagingCore-9.2-gd.lib
vtkImagingFourier-9.2-gd.lib
vtkImagingGeneral-9.2-gd.lib
vtkImagingHybrid-9.2-gd.lib
vtkImagingMath-9.2-gd.lib
vtkImagingMorphological-9.2-gd.lib
vtkImagingSources-9.2-gd.lib
vtkImagingStatistics-9.2-gd.lib
vtkImagingStencil-9.2-gd.lib
vtkInfovisCore-9.2-gd.lib
vtkInfovisLayout-9.2-gd.lib
vtkInteractionImage-9.2-gd.lib
vtkInteractionStyle-9.2-gd.lib
vtkInteractionWidgets-9.2-gd.lib
vtkIOAMR-9.2-gd.lib
vtkIOAsynchronous-9.2-gd.lib
vtkIOCesium3DTiles-9.2-gd.lib
vtkIOCGNSReader-9.2-gd.lib
vtkIOChemistry-9.2-gd.lib
vtkIOCityGML-9.2-gd.lib
vtkIOCONVERGECFD-9.2-gd.lib
vtkIOCore-9.2-gd.lib
vtkIOEnSight-9.2-gd.lib
vtkIOExodus-9.2-gd.lib
vtkIOExport-9.2-gd.lib
vtkIOExportGL2PS-9.2-gd.lib
vtkIOExportPDF-9.2-gd.lib
vtkIOGeometry-9.2-gd.lib
vtkIOHDF-9.2-gd.lib
vtkIOImage-9.2-gd.lib
vtkIOImport-9.2-gd.lib
vtkIOInfovis-9.2-gd.lib
vtkIOIOSS-9.2-gd.lib
vtkIOLegacy-9.2-gd.lib
vtkIOLSDyna-9.2-gd.lib
vtkIOMINC-9.2-gd.lib
vtkIOMotionFX-9.2-gd.lib
vtkIOMovie-9.2-gd.lib
vtkIONetCDF-9.2-gd.lib
vtkIOOggTheora-9.2-gd.lib
vtkIOParallel-9.2-gd.lib
vtkIOParallelXML-9.2-gd.lib
vtkIOPLY-9.2-gd.lib
vtkIOSegY-9.2-gd.lib
vtkIOSQL-9.2-gd.lib
vtkioss-9.2-gd.lib
vtkIOTecplotTable-9.2-gd.lib
vtkIOVeraOut-9.2-gd.lib
vtkIOVideo-9.2-gd.lib
vtkIOXML-9.2-gd.lib
vtkIOXMLParser-9.2-gd.lib
vtkjpeg-9.2-gd.lib
vtkjsoncpp-9.2-gd.lib
vtkkissfft-9.2-gd.lib
vtklibharu-9.2-gd.lib
vtklibproj-9.2-gd.lib
vtklibxml2-9.2-gd.lib
vtkloguru-9.2-gd.lib
vtklz4-9.2-gd.lib
vtklzma-9.2-gd.lib
vtkmetaio-9.2-gd.lib
vtknetcdf-9.2-gd.lib
vtkogg-9.2-gd.lib
vtkParallelCore-9.2-gd.lib
vtkParallelDIY-9.2-gd.lib
vtkpng-9.2-gd.lib
vtkpugixml-9.2-gd.lib
vtkRenderingAnnotation-9.2-gd.lib
vtkRenderingContext2D-9.2-gd.lib
vtkRenderingContextOpenGL2-9.2-gd.lib
vtkRenderingCore-9.2-gd.lib
vtkRenderingFreeType-9.2-gd.lib
vtkRenderingGL2PSOpenGL2-9.2-gd.lib
vtkRenderingHyperTreeGrid-9.2-gd.lib
vtkRenderingImage-9.2-gd.lib
vtkRenderingLabel-9.2-gd.lib
vtkRenderingLICOpenGL2-9.2-gd.lib
vtkRenderingLOD-9.2-gd.lib
vtkRenderingOpenGL2-9.2-gd.lib
vtkRenderingSceneGraph-9.2-gd.lib
vtkRenderingUI-9.2-gd.lib
vtkRenderingVolume-9.2-gd.lib
vtkRenderingVolumeOpenGL2-9.2-gd.lib
vtkRenderingVtkJS-9.2-gd.lib
vtksqlite-9.2-gd.lib
vtksys-9.2-gd.lib
vtkTestingRendering-9.2-gd.lib
vtktheora-9.2-gd.lib
vtktiff-9.2-gd.lib
vtkverdict-9.2-gd.lib
vtkViewsContext2D-9.2-gd.lib
vtkViewsCore-9.2-gd.lib
vtkViewsInfovis-9.2-gd.lib
vtkWrappingTools-9.2-gd.lib
vtkzlib-9.2-gd.lib
OpenNI2.lib

保存屬性表?

?之后可以通過添加現有屬性表找到保存的屬性添加就行

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

5、測試

#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("Display Point Cloud"));viewer->setBackgroundColor(255, 245, 238);  //設置背景顏色為黑色// 對點云著色可視化 (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);
}

#include <iostream>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/console/parse.h>int main(int argc, char** argv) {std::cout << "Test PCL !!!" << std::endl;pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr(new pcl::PointCloud<pcl::PointXYZRGB>);uint8_t r(255), g(15), b(15);for (float z(-1.0); z <= 1.0; z += 0.05){for (float angle(0.0); angle <= 360.0; angle += 5.0){pcl::PointXYZRGB point;point.x = 0.5 * cosf(pcl::deg2rad(angle));point.y = sinf(pcl::deg2rad(angle));point.z = z;uint32_t rgb = (static_cast<uint32_t>(r) << 16 |static_cast<uint32_t>(g) << 8 | static_cast<uint32_t>(b));point.rgb = *reinterpret_cast<float*>(&rgb);point_cloud_ptr->points.push_back(point);}if (z < 0.0){r -= 12;g += 12;}else{g -= 12;b += 12;}}point_cloud_ptr->width = (int)point_cloud_ptr->points.size();point_cloud_ptr->height = 1;pcl::visualization::CloudViewer viewer("test");viewer.showCloud(point_cloud_ptr);while (!viewer.wasStopped()) {};return 0;
}

#include<iostream>
#include <vector>
#include<pcl/io/pcd_io.h>
#include<pcl/visualization/pcl_visualizer.h>
#include<pcl/point_types.h>
#include<pcl/filters/voxel_grid.h>
#include <pcl/filters/extract_indices.h>
#include<pcl/filters/passthrough.h>
#include <pcl/segmentation/progressive_morphological_filter.h>
using namespace std; //use  namespace "std"
using namespace pcl;  //use namesapce "pcl",引入這個命名空間后可以簡化代碼#define  PI 3.141592653
//點云去噪
void pclMyFilter(string path)
{//點云指針類型對象,訪問方式:cloud->point[i].xpcl::PCLPointCloud2::Ptr cloud(new pcl::PCLPointCloud2);//原始點云文件pcl::PCLPointCloud2::Ptr cloud_filtered(new pcl::PCLPointCloud2);//去噪后所生成的新的點云文件//輸入點云數據pcl::PCDReader reader;reader.read(path, *cloud);//去噪之前點云數量統計cout << "pointcloud before filtering :" << cloud->width * cloud->height << "data points(" << pcl::getFieldsList(*cloud) << ")." << endl;//創建去噪 實例化一個對象  方法采用VoxelGridpcl::VoxelGrid<pcl::PCLPointCloud2> vgd;//輸入要處理的原始點云數據vgd.setInputCloud(cloud);//設置葉子大小vgd.setLeafSize(2.0f, 2.0f, 2.0f);vgd.filter(*cloud_filtered);//去噪后的點云數量統計cout << "pointcloud after filtering:" << cloud_filtered->width * cloud_filtered->height << "data points(" << pcl::getFieldsList(*cloud_filtered) << ")." << endl;//將去噪后的點云寫入新的pcd文件中pcl::PCDWriter writer;writer.write("./data/samp12_quzao.pcd", *cloud_filtered, Eigen::Vector4f::Zero(), Eigen::Quaternionf::Identity(), false);
}//可視化點云
int pclMyShow(string path)
{/*---------------------------加載點云-----------------------------* 1、創建點云對象* 2、判斷并讀取點云文件* 3、輸出點云數量*/pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);  //使用PointXYZRGB類實例化一個對象cloud// PointCloud<PointXYZRGB>::Ptr cloud(new PointCloud<PointXYZRGB>);  //簡化后的代碼pcl::PCDReader pcdread;if (pcdread.read(path, *cloud) < 0){PCL_ERROR("\a->點云文件不存在!\n");system("pause");return 1;}cout << "->加載了" << cloud->points.size() << "個數據點" << endl;//-------------------------Visualizer 可視化------------------------------pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Point Cloud Viewer"));  //創建視圖對象,定義標題欄名稱“3D Viewer”viewer->addPointCloud<pcl::PointXYZRGB>(cloud, "samp12_cloud"); //將點云添加到視圖對象中,并定義一個唯一的IDpcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZRGB> fildcolor(cloud, "z");//按照z字段進行渲染/****************注意此處ID不能與視圖對象的ID值相同,否則會報錯****************************/viewer->addPointCloud<pcl::PointXYZRGB>(cloud, fildcolor, "samp12cloud");/*下面的ID值應該與上面兩個ID其中一個相同,即與dataset or fildcolor的ID相同,不能重新定義ID否則會報錯"Could not find any PointCloud datasets with id <Csite2_cloud1>!"*/viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 4.5, "samp12cloud");//設置點云大小viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 0.5, 0.9, "samp12_cloud");//設置點云顯示顏色,rgb顏色范圍在0~1之間viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_OPACITY, 0.8, "samp12cloud");//設置點云透明度viewer->setBackgroundColor(0, 0, 0);//窗口背景色,黑色viewer->addText("samp12", 20, 20, "text_1");//在指定位置添加文字//必選while (!viewer->wasStopped()){viewer->spinOnce(100);//boost::this_thread::sleep(boost::posix_time::microseconds(100000));}
}int main()
{//pclMyFilter("./data/samp12.pcd");pclMyShow("DKdata2.pcd");return 0;
}

?ps:測試用例中的pcd點云數據可以用其他數據代替,比如斯坦福的兔子

參考:Win10 系統下VisualStudio2022 配置點云庫 PCL 1.13.0

? ? ? ? ? ?Windows11+VS2022+PCL1.13.0 安裝配置記錄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899220.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大模型tokenizer重構流程

大模型tokenizer層再訓練&#xff08;選取Qwen7B試驗&#xff0c;重構token層&#xff09; 最近公司可能想訓練一個蛋白質大模型&#xff0c;需要了解一下大模型tokenizer重構&#xff0c;之后可能要訓練&#xff0c;這里做了一定的總結。 文章目錄 1. 首先查看Qwen2.5 7B基本…

Android設計模式之單例模式

一、定義&#xff1a;確保一個類只有一個實例&#xff0c;并且自動實例化&#xff0c;并向整個系統提供這個實例。 二、使用場景&#xff1a;避免重復創建對象&#xff0c;過多消耗系統資源。 三、使用方式 3.1餓漢式&#xff1a;類加載時立即初始化&#xff0c;線程安全&…

docker ssh遠程連接

目錄 操作命令&#xff1a; 確保 SSH 配置允許 root 登錄&#xff1a; docker提交&#xff1a; 操作命令&#xff1a; # 進入容器 docker exec -ti lbg04 /bin/bash# 更新包管理并安裝 SSH 服務&#xff08;Ubuntu/Debian 示例&#xff09; apt-get update apt-get install…

關于matlab和python誰快的問題

關于matlab和python誰快的問題&#xff0c;python比matlab在乘法上快10倍&#xff0c;指數計算快4倍&#xff0c;加減運算持平&#xff0c;略慢于matlab。或許matlab只適合求解特征值。 import torch import timen 50000 # 矩陣規模 M torch.rand(n, 31)start_time time.t…

準確--配置服務器文件數

某些系統可能在 /etc/security/limits.d/ 目錄下有額外配置覆蓋全局設置。檢查是否存在沖突文件&#xff1a; ls /etc/security/limits.d/如果有文件&#xff08;如 90-nproc.conf 或 90-nofile.conf&#xff09;&#xff0c;需編輯或刪除這些文件中的沖突配置。 確保系統啟用…

VectorBT:使用PyTorch+LSTM訓練和回測股票模型 進階一

VectorBT&#xff1a;使用PyTorchLSTM訓練和回測股票模型 進階一 本文介紹了如何使用PyTorch和LSTM模型進行股票數據的訓練和回測。涵蓋了數據預處理、特征選擇、LSTM模型構建、模型訓練與驗證、動態閾值策略生成交易信號以及使用VectorBT進行回測和績效分析。 文中內容僅限技術…

mysql中的聚簇索引,什么是聚簇索引和非聚簇索引

文章目錄 1. 什么是聚簇索引2. 非聚簇索引3. 聚簇索引的優缺點4. 聚簇索引的使用場景5. 聚簇索引和主鍵索引的異同前言: 在繼續講解專欄內容之前,先學習幾個概念,以便更好了解: 什么是聚簇索引什么是回表這篇文章詳細分析 聚簇索引。回表的理解可以進入這篇文章:什么是回表…

MantisBT在Windows10上安裝部署詳細步驟

MantisBT 是一款基于 Web 的開源缺陷跟蹤系統&#xff0c;以下是在 Windows 10 上安裝部署 MantisBT 的詳細步驟&#xff1a; 1. 安裝必要的環境 MantisBT 是一個基于 PHP 的 Web 應用程序&#xff0c;因此需要安裝 Web 服務器&#xff08;如 Apache&#xff09;、PHP 和數據…

深入理解K8s與Docker的關系:容器化技術的雙雄

友情提示&#xff1a;本文內容由銀河易創&#xff08;https://ai.eaigx.com&#xff09;AI創作平臺gpt-4-turbo模型生成&#xff0c;僅供參考。 在現代云計算及微服務架構的發展中&#xff0c;Docker與Kubernetes&#xff08;K8s&#xff09;作為兩大核心技術&#xff0c;被廣泛…

藍橋與力扣刷題(藍橋 藍橋騎士)

題目&#xff1a;小明是藍橋王國的騎士&#xff0c;他喜歡不斷突破自我。 這天藍橋國王給他安排了 N 個對手&#xff0c;他們的戰力值分別為 a1,a2,...,an&#xff0c;且按順序阻擋在小明的前方。對于這些對手小明可以選擇挑戰&#xff0c;也可以選擇避戰。 身為高傲的騎士&a…

如何查看window電腦的GPU信息

GPU&#xff08;圖形處理器&#xff0c;Graphics Processing Unit&#xff09;和顯卡是兩個密切相關但不同的概念 概念 1. ?基本概念? ?GPU?&#xff1a;是專門用于處理圖像和視頻信息的微處理器&#xff0c;擁有強大的并行計算能力&#xff0c;主要負責圖形渲染、數值分…

26考研——查找_樹形查找_二叉排序樹(BST)(7)

408答疑 文章目錄 三、樹形查找二叉排序樹&#xff08;BST&#xff09;二叉排序樹中結點值之間的關系二叉樹形查找二叉排序樹的查找過程示例 向二叉排序樹中插入結點插入過程示例 構造二叉排序樹的過程構造示例 二叉排序樹中刪除結點的操作情況一&#xff1a;被刪除結點是葉結點…

【數據庫事務、消息隊列事務、Redis 事務、Spring 事務 詳細分析】

數據庫事務、消息隊列事務、Redis 事務、Spring 事務** 的詳細分析 在分布式系統和應用開發中&#xff0c;事務管理是確保數據一致性和可靠性的關鍵機制。以下是針對 數據庫事務、消息隊列事務、Redis 事務、Spring 事務 的詳細分析&#xff0c;包括原理、特點、適用場景和對比…

kubectl 命令參數詳解與示例

kubectl 命令參數詳解與示例 kubectl 是 Kubernetes 的命令行工具&#xff0c;用于與 Kubernetes 集群交互。下面我將詳細介紹 kubectl 的主要命令參數&#xff0c;并提供相應的使用示例。 一、基礎命令 1. kubectl get - 獲取資源信息 常用參數&#xff1a; -n, --namesp…

#vue中解決異步請求的競態

// composables/useFetchWithoutRace.js import { ref } from vue; import axios from axios;// 定義一個可復用的 Composition 函數&#xff0c;處理帶有競態控制的異步請求 export function useFetchWithoutRace() {// 定義響應式變量 latestRequestId&#xff0c;用于追蹤最…

如何在 Postman 中導入和導出 cURL 命令?

cURL 是一款廣受歡迎的命令行工具&#xff0c;專門用于執行 HTTP 請求。它在 Web 應用或 API 測試中極為實用&#xff0c;讓用戶得以借助在 API 開發者社區廣為流行的成熟語法&#xff0c;直接通過命令行與 API 進行交互。若你需要在多個環境下運行眾多 cURL 命令&#xff0c;可…

用python制作一個貪吃蛇小游戲

文章目錄 效果圖python源碼使用說明效果圖 只需要一百多行python代碼,就能制作一個貪吃蛇小游戲。效果如下: 操作說明: 你可以使用上下左右箭頭鍵來控制蛇的移動方向。蛇吃到食物后會變長,當蛇撞到墻壁或自己的身體時游戲結束。游戲結束后,你可以按 Q 退出游戲,或按 C…

react 15-16-17-18各版本的核心區別、底層原理及演進邏輯的深度解析

一、React 15&#xff08;2016&#xff09; 核心架構&#xff1a;Stack Reconciler&#xff08;棧協調器&#xff09; 工作原理&#xff1a; 同步遞歸渲染&#xff1a;采用深度優先遍歷方式遞歸處理 Virtual DOM&#xff0c;形成不可中斷的調用棧渲染流程&#xff1a;1. 觸發 …

微信小程序pdf預覽

1.示例圖 2.代碼 fileId&#xff1a;要預覽的pdf文件的id viewsFiles(fileId) {wx.showLoading({title: 加載中...});var params {url: "/common/getFile/" fileId ,//后端提供的接口method: "GET",responseType: "arraybuffer",callBack: …

雪花算法生成分布式唯一ID

雪花算法的結構是由時間戳、工作機器ID和序列號構成。要確保全局唯一&#xff0c;必須保證每個節點的機器ID唯一&#xff0c;并且同一毫秒內序列號不重復。在分庫分表的環境下使用雪花算法&#xff0c;機器ID的分配是關鍵。常見的做法是通過分布式系統協調&#xff0c;比如使用…