PCL(Point Cloud Library)有很多版本,很多博主只是簡單給一個連接,但是軟件會有更新的版本推出,所以教給大家怎樣能夠找到自己想要的版本。
對於剛剛接觸PCL的人來說,在Windows下配置PCL並不是一件輕鬆的事情,我把自己經歷的坑總結、分享出來,希望一起學習,共同進步。
PCL庫:
尋找資源並下載PCL庫:http://pointclouds.org ,這是PCL的官網,下載速度還比較快,建議在官網下載。點擊主頁的Dev Zone。(嫌麻煩的小夥伴可以我的雲盤下載,版本:PCL-1.8.1-AllInOne-msvc2017-win64.exe、pcl-1.8.1-pdb-msvc2017-win64.zip以及後面例子要用的rabbit.pcd文件。鏈接:https://pan.baidu.com/s/1-1rTxA69xG73BbCk17GDjQ,提取碼:98st )
點擊連接後轉入GitHub頁面,點擊Releases,點擊tags,找到自己想要的版本,點擊進去,拉倒頁面最下面。(我選擇的1.8.1版本,小夥伴們可根據自己的需求選擇不同版本)
下載完成後,開始安裝。安裝過程中特別需要說明的地方會截圖出來,未做截圖說明的,默認即可。
在圖六中一定勾選上Add PCL to system PATH for all users。
圖六
修改安裝路徑到你想要的位置(默認的是C盤)
安裝過程中,會彈出OpenNI的安裝程序,更改安裝路徑爲你安裝的PCL路徑下的3rdParty文件夾下的OpenNI2文件夾中。
拷貝之前下載的pcl-1.8.1-pdb-msvc2017-win64.zip裏面所有的內容(不要文件夾直接拷過去,只拷貝內容),到你PCL安裝路徑下的bin文件夾。
配置電腦環境變量
我的電腦右鍵-->屬性-->高級系統設置-->高級-->環境變量-->系統變量-->Path-->編輯-->新建
D:\PCL 1.8.1\bin
D:\PCL 1.8.1\3rdParty\FLANN\bin
D:\PCL 1.8.1\3rdParty\Qhull\bin
D:\PCL 1.8.1\3rdParty\VTK\bin
D:\PCL 1.8.1\3rdParty\OpenNI2\Tools
配置VS2017(這部分是重點,需要格外注意)
打開VS新建一個控制檯程序。在解決方案管理器裏找到你新建的項目,右鍵點屬性,彈出屬性頁窗口。
1、調試 -->環境,添加內容如下:
path=D:\PCL 1.8.1\bin;
2、C/C++-->預處理器-->預處理器定義,添加上如下內容:
_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS
3、VC++目錄-->包含目錄,添加如下內容:
D:\PCL 1.8.1\include\pcl-1.8;
D:\PCL 1.8.1\3rdParty\Boost\include\boost-1_64;
D:\PCL 1.8.1\3rdParty\Eigen\eigen3;
D:\PCL 1.8.1\3rdParty\FLANN\include;
D:\PCL 1.8.1\3rdParty\Qhull\include;
D:\PCL 1.8.1\3rdParty\VTK\include\vtk-8.0;
D:\PCL 1.8.1\3rdParty\OpenNI2\Include
4、VC++目錄-->庫目錄,添加如下內容
D:\PCL 1.8.1\lib;
D:\PCL 1.8.1\3rdParty\Boost\lib;
D:\PCL 1.8.1\3rdParty\FLANN\lib;
D:\PCL 1.8.1\3rdParty\Qhull\lib;
D:\PCL 1.8.1\3rdParty\VTK\lib;
D:\PCL 1.8.1\3rdParty\OpenNI2\Lib;
5、鏈接器-->輸入-->附加依賴項,添加以下內容(分Debug版本和Release版本),有很多小夥伴到這一步就好使了,可以直接運行後面的例子,如果編譯有錯誤,繼續配置:
Debug:版本:
vtknetcdf_c++-gd.lib;
pcl_common_debug.lib;
pcl_features_debug.lib;
pcl_filters_debug.lib;
pcl_io_ply_debug.lib;
pcl_io_debug.lib;
pcl_kdtree_debug.lib;
pcl_keypoints_debug.lib;
pcl_ml_debug.lib;
pcl_octree_debug.lib;
pcl_outofcore_debug.lib;
pcl_people_debug.lib;
pcl_recognition_debug.lib;
pcl_registration_debug.lib;
pcl_sample_consensus_debug.lib;
pcl_search_debug.lib;
pcl_segmentation_debug.lib;
pcl_stereo_debug.lib;
pcl_surface_debug.lib;
pcl_tracking_debug.lib;
pcl_visualization_debug.lib;
libboost_atomic-vc141-mt-gd-1_64.lib;
libboost_bzip2-vc141-mt-gd-1_64.lib;
libboost_chrono-vc141-mt-gd-1_64.lib;
libboost_container-vc141-mt-gd-1_64.lib;
libboost_context-vc141-mt-gd-1_64.lib;
libboost_coroutine-vc141-mt-gd-1_64.lib;
libboost_date_time-vc141-mt-gd-1_64.lib;
libboost_exception-vc141-mt-gd-1_64.lib;
libboost_fiber-vc141-mt-gd-1_64.lib;
libboost_filesystem-vc141-mt-gd-1_64.lib;
libboost_graph-vc141-mt-gd-1_64.lib;
libboost_graph_parallel-vc141-mt-gd-1_64.lib;
libboost_iostreams-vc141-mt-gd-1_64.lib;
libboost_locale-vc141-mt-gd-1_64.lib;
libboost_log-vc141-mt-gd-1_64.lib;
libboost_log_setup-vc141-mt-gd-1_64.lib;
libboost_math_c99-vc141-mt-gd-1_64.lib;
libboost_math_c99f-vc141-mt-gd-1_64.lib;
libboost_math_c99l-vc141-mt-gd-1_64.lib;
libboost_math_tr1-vc141-mt-gd-1_64.lib;
libboost_math_tr1f-vc141-mt-gd-1_64.lib;
libboost_math_tr1l-vc141-mt-gd-1_64.lib;
libboost_mpi-vc141-mt-gd-1_64.lib;
libboost_numpy3-vc141-mt-gd-1_64.lib;
libboost_numpy-vc141-mt-gd-1_64.lib;
libboost_prg_exec_monitor-vc141-mt-gd-1_64.lib;
libboost_program_options-vc141-mt-gd-1_64.lib;
libboost_python3-vc141-mt-gd-1_64.lib;
libboost_python-vc141-mt-gd-1_64.lib;
libboost_random-vc141-mt-gd-1_64.lib;
libboost_regex-vc141-mt-gd-1_64.lib;
libboost_serialization-vc141-mt-gd-1_64.lib;
libboost_signals-vc141-mt-gd-1_64.lib;
libboost_system-vc141-mt-gd-1_64.lib;
libboost_test_exec_monitor-vc141-mt-gd-1_64.lib;
libboost_thread-vc141-mt-gd-1_64.lib;
libboost_timer-vc141-mt-gd-1_64.lib;
libboost_type_erasure-vc141-mt-gd-1_64.lib;
libboost_unit_test_framework-vc141-mt-gd-1_64.lib;
libboost_wave-vc141-mt-gd-1_64.lib;
libboost_wserialization-vc141-mt-gd-1_64.lib;
libboost_zlib-vc141-mt-gd-1_64.lib;
flann-gd.lib;
flann_cpp-gd.lib;
flann_cpp_s-gd.lib;
flann_s-gd.lib;
qhull_d.lib;
qhullcpp_d.lib;
qhullstatic_d.lib;
qhullstatic_r_d.lib;
qhull_p_d.lib;
qhull_r_d.lib;
vtkalglib-8.0-gd.lib;
vtkChartsCore-8.0-gd.lib;
vtkCommonColor-8.0-gd.lib;
vtkCommonComputationalGeometry-8.0-gd.lib;
vtkCommonCore-8.0-gd.lib;
vtkCommonDataModel-8.0-gd.lib;
vtkCommonExecutionModel-8.0-gd.lib;
vtkCommonMath-8.0-gd.lib;
vtkCommonMisc-8.0-gd.lib;
vtkCommonSystem-8.0-gd.lib;
vtkCommonTransforms-8.0-gd.lib;
vtkDICOMParser-8.0-gd.lib;
vtkDomainsChemistry-8.0-gd.lib;
vtkexoIIc-8.0-gd.lib;
vtkexpat-8.0-gd.lib;
vtkFiltersAMR-8.0-gd.lib;
vtkFiltersCore-8.0-gd.lib;
vtkFiltersExtraction-8.0-gd.lib;
vtkFiltersFlowPaths-8.0-gd.lib;
vtkFiltersGeneral-8.0-gd.lib;
vtkFiltersGeneric-8.0-gd.lib;
vtkFiltersGeometry-8.0-gd.lib;
vtkFiltersHybrid-8.0-gd.lib;
vtkFiltersHyperTree-8.0-gd.lib;
vtkFiltersImaging-8.0-gd.lib;
vtkFiltersModeling-8.0-gd.lib;
vtkFiltersParallel-8.0-gd.lib;
vtkFiltersParallelImaging-8.0-gd.lib;
vtkFiltersPoints-8.0-gd.lib;
vtkFiltersProgrammable-8.0-gd.lib;
vtkFiltersSelection-8.0-gd.lib;
vtkFiltersSMP-8.0-gd.lib;
vtkFiltersSources-8.0-gd.lib;
vtkFiltersStatistics-8.0-gd.lib;
vtkFiltersTexture-8.0-gd.lib;
vtkFiltersTopology-8.0-gd.lib;
vtkFiltersVerdict-8.0-gd.lib;
vtkfreetype-8.0-gd.lib;
vtkGeovisCore-8.0-gd.lib;
vtkgl2ps-8.0-gd.lib;
vtkhdf5-8.0-gd.lib;
vtkhdf5_hl-8.0-gd.lib;
vtkImagingColor-8.0-gd.lib;
vtkImagingCore-8.0-gd.lib;
vtkImagingFourier-8.0-gd.lib;
vtkImagingGeneral-8.0-gd.lib;
vtkImagingHybrid-8.0-gd.lib;
vtkImagingMath-8.0-gd.lib;
vtkImagingMorphological-8.0-gd.lib;
vtkImagingSources-8.0-gd.lib;
vtkImagingStatistics-8.0-gd.lib;
vtkImagingStencil-8.0-gd.lib;
vtkInfovisCore-8.0-gd.lib;
vtkInfovisLayout-8.0-gd.lib;
vtkInteractionImage-8.0-gd.lib;
vtkInteractionStyle-8.0-gd.lib;
vtkInteractionWidgets-8.0-gd.lib;
vtkIOAMR-8.0-gd.lib;
vtkIOCore-8.0-gd.lib;
vtkIOEnSight-8.0-gd.lib;
vtkIOExodus-8.0-gd.lib;
vtkIOExport-8.0-gd.lib;
vtkIOExportOpenGL-8.0-gd.lib;
vtkIOGeometry-8.0-gd.lib;
vtkIOImage-8.0-gd.lib;
vtkIOImport-8.0-gd.lib;
vtkIOInfovis-8.0-gd.lib;
vtkIOLegacy-8.0-gd.lib;
vtkIOLSDyna-8.0-gd.lib;
vtkIOMINC-8.0-gd.lib;
vtkIOMovie-8.0-gd.lib;
vtkIONetCDF-8.0-gd.lib;
vtkIOParallel-8.0-gd.lib;
vtkIOParallelXML-8.0-gd.lib;
vtkIOPLY-8.0-gd.lib;
vtkIOSQL-8.0-gd.lib;
vtkIOTecplotTable-8.0-gd.lib;
vtkIOVideo-8.0-gd.lib;
vtkIOXML-8.0-gd.lib;
vtkIOXMLParser-8.0-gd.lib;
vtkjpeg-8.0-gd.lib;
vtkjsoncpp-8.0-gd.lib;
vtklibharu-8.0-gd.lib;
vtklibxml2-8.0-gd.lib;
vtklz4-8.0-gd.lib;
vtkmetaio-8.0-gd.lib;
vtkNetCDF-8.0-gd.lib;
vtkoggtheora-8.0-gd.lib;
vtkParallelCore-8.0-gd.lib;
vtkpng-8.0-gd.lib;
vtkproj4-8.0-gd.lib;
vtkRenderingAnnotation-8.0-gd.lib;
vtkRenderingContext2D-8.0-gd.lib;
vtkRenderingContextOpenGL-8.0-gd.lib;
vtkRenderingCore-8.0-gd.lib;
vtkRenderingFreeType-8.0-gd.lib;
vtkRenderingGL2PS-8.0-gd.lib;
vtkRenderingImage-8.0-gd.lib;
vtkRenderingLabel-8.0-gd.lib;
vtkRenderingLIC-8.0-gd.lib;
vtkRenderingLOD-8.0-gd.lib;
vtkRenderingOpenGL-8.0-gd.lib;
vtkRenderingVolume-8.0-gd.lib;
vtkRenderingVolumeOpenGL-8.0-gd.lib;
vtksqlite-8.0-gd.lib;
vtksys-8.0-gd.lib;
vtktiff-8.0-gd.lib;
vtkverdict-8.0-gd.lib;
vtkViewsContext2D-8.0-gd.lib;
vtkViewsCore-8.0-gd.lib;
vtkViewsInfovis-8.0-gd.lib;
vtkzlib-8.0-gd.lib;
opengl32.lib;
Release版本:
pcl_common_release.lib;
pcl_features_release.lib;
pcl_filters_release.lib;
pcl_io_ply_release.lib;
pcl_io_release.lib;
pcl_kdtree_release.lib;
pcl_keypoints_release.lib;
pcl_ml_release.lib;
pcl_octree_release.lib;
pcl_outofcore_release.lib;
pcl_people_release.lib;
pcl_recognition_release.lib;
pcl_registration_release.lib;
pcl_sample_consensus_release.lib;
pcl_search_release.lib;
pcl_segmentation_release.lib;
pcl_stereo_release.lib;
pcl_surface_release.lib;
pcl_tracking_release.lib;
pcl_visualization_release.lib;
pcl_io_release.lib;
libboost_atomic-vc141-mt-1_64.lib;
libboost_bzip2-vc141-mt-1_64.lib;
libboost_chrono-vc141-mt-1_64.lib;
libboost_container-vc141-mt-1_64.lib;
libboost_context-vc141-mt-1_64.lib;
libboost_coroutine-vc141-mt-1_64.lib;
libboost_date_time-vc141-mt-1_64.lib;
libboost_exception-vc141-mt-1_64.lib;
libboost_fiber-vc141-mt-1_64.lib;
libboost_filesystem-vc141-mt-1_64.lib;
libboost_graph-vc141-mt-1_64.lib;
libboost_graph_parallel-vc141-mt-1_64.lib;
libboost_iostreams-vc141-mt-1_64.lib;
libboost_locale-vc141-mt-1_64.lib;
libboost_log-vc141-mt-1_64.lib;
libboost_log_setup-vc141-mt-1_64.lib;
libboost_math_c99-vc141-mt-1_64.lib;
libboost_math_c99f-vc141-mt-1_64.lib;
libboost_math_c99l-vc141-mt-1_64.lib;
libboost_math_tr1-vc141-mt-1_64.lib;
libboost_math_tr1f-vc141-mt-1_64.lib;
libboost_math_tr1l-vc141-mt-1_64.lib;
libboost_mpi-vc141-mt-1_64.lib;
libboost_numpy-vc141-mt-1_64.lib;
libboost_numpy3-vc141-mt-1_64.lib;
libboost_prg_exec_monitor-vc141-mt-1_64.lib;
libboost_program_options-vc141-mt-1_64.lib;
libboost_python-vc141-mt-1_64.lib;
libboost_python3-vc141-mt-1_64.lib;
libboost_random-vc141-mt-1_64.lib;
libboost_regex-vc141-mt-1_64.lib;
libboost_serialization-vc141-mt-1_64.lib;
libboost_signals-vc141-mt-1_64.lib;
libboost_system-vc141-mt-1_64.lib;
libboost_test_exec_monitor-vc141-mt-1_64.lib;
libboost_thread-vc141-mt-1_64.lib;
libboost_timer-vc141-mt-1_64.lib;
libboost_type_erasure-vc141-mt-1_64.lib;
libboost_unit_test_framework-vc141-mt-1_64.lib;
libboost_wave-vc141-mt-1_64.lib;
libboost_wserialization-vc141-mt-1_64.lib;
libboost_zlib-vc141-mt-1_64.lib;
OpenNI2.lib;
vtkalglib-8.0.lib;
vtkChartsCore-8.0.lib;
vtkCommonColor-8.0.lib;
vtkCommonComputationalGeometry-8.0.lib;
vtkCommonCore-8.0.lib;
vtkCommonDataModel-8.0.lib;
vtkCommonExecutionModel-8.0.lib;
vtkCommonMath-8.0.lib;
vtkCommonMisc-8.0.lib;
vtkCommonSystem-8.0.lib;
vtkCommonTransforms-8.0.lib;
vtkDICOMParser-8.0.lib;
vtkDomainsChemistry-8.0.lib;
vtkexoIIc-8.0.lib;
vtkexpat-8.0.lib;
vtkFiltersAMR-8.0.lib;
vtkFiltersCore-8.0.lib;
vtkFiltersExtraction-8.0.lib;
vtkFiltersFlowPaths-8.0.lib;
vtkFiltersGeneral-8.0.lib;
vtkFiltersGeneric-8.0.lib;
vtkFiltersGeometry-8.0.lib;
vtkFiltersHybrid-8.0.lib;
vtkFiltersHyperTree-8.0.lib;
vtkFiltersImaging-8.0.lib;
vtkFiltersModeling-8.0.lib;
vtkFiltersParallel-8.0.lib;
vtkFiltersParallelImaging-8.0.lib;
vtkFiltersPoints-8.0.lib;
vtkFiltersProgrammable-8.0.lib;
vtkFiltersSelection-8.0.lib;
vtkFiltersSMP-8.0.lib;
vtkFiltersSources-8.0.lib;
vtkFiltersStatistics-8.0.lib;
vtkFiltersTexture-8.0.lib;
vtkFiltersTopology-8.0.lib;
vtkFiltersVerdict-8.0.lib;
vtkfreetype-8.0.lib;
vtkGeovisCore-8.0.lib;
vtkgl2ps-8.0.lib;
vtkhdf5-8.0.lib;
vtkhdf5_hl-8.0.lib;
vtkImagingColor-8.0.lib;
vtkImagingCore-8.0.lib;
vtkImagingFourier-8.0.lib;
vtkImagingGeneral-8.0.lib;
vtkImagingHybrid-8.0.lib;
vtkImagingMath-8.0.lib;
vtkImagingMorphological-8.0.lib;
vtkImagingSources-8.0.lib;
vtkImagingStatistics-8.0.lib;
vtkImagingStencil-8.0.lib;
vtkInfovisCore-8.0.lib;
vtkInfovisLayout-8.0.lib;
vtkInteractionImage-8.0.lib;
vtkInteractionStyle-8.0.lib;
vtkInteractionWidgets-8.0.lib;
vtkIOAMR-8.0.lib;
vtkIOCore-8.0.lib;
vtkIOEnSight-8.0.lib;
vtkIOExodus-8.0.lib;
vtkIOExport-8.0.lib;
vtkIOExportOpenGL-8.0.lib;
vtkIOGeometry-8.0.lib;
vtkIOImage-8.0.lib;
vtkIOImport-8.0.lib;
vtkIOInfovis-8.0.lib;
vtkIOLegacy-8.0.lib;
vtkIOLSDyna-8.0.lib;
vtkIOMINC-8.0.lib;
vtkIOMovie-8.0.lib;
vtkIONetCDF-8.0.lib;
vtkIOParallel-8.0.lib;
vtkIOParallelXML-8.0.lib;
vtkIOPLY-8.0.lib;
vtkIOSQL-8.0.lib;
vtkIOTecplotTable-8.0.lib;
vtkIOVideo-8.0.lib;
vtkIOXML-8.0.lib;
vtkIOXMLParser-8.0.lib;
vtkjpeg-8.0.lib;
vtkjsoncpp-8.0.lib;
vtklibharu-8.0.lib;
vtklibxml2-8.0.lib;
vtklz4-8.0.lib;
vtkmetaio-8.0.lib;
vtkNetCDF-8.0.lib;
vtknetcdf_c++.lib;
vtkoggtheora-8.0.lib;
vtkParallelCore-8.0.lib;
vtkpng-8.0.lib;
vtkproj4-8.0.lib;
vtkRenderingAnnotation-8.0.lib;
vtkRenderingContext2D-8.0.lib;
vtkRenderingContextOpenGL-8.0.lib;
vtkRenderingCore-8.0.lib;
vtkRenderingFreeType-8.0.lib;
vtkRenderingGL2PS-8.0.lib;
vtkRenderingImage-8.0.lib;
vtkRenderingLabel-8.0.lib;
vtkRenderingLIC-8.0.lib;
vtkRenderingLOD-8.0.lib;
vtkRenderingOpenGL-8.0.lib;
vtkRenderingVolume-8.0.lib;
vtkRenderingVolumeOpenGL-8.0.lib;
vtksqlite-8.0.lib;
vtksys-8.0.lib;
vtktiff-8.0.lib;
vtkverdict-8.0.lib;
vtkViewsContext2D-8.0.lib;
vtkViewsCore-8.0.lib;
vtkViewsInfovis-8.0.lib;
vtkzlib-8.0.lib;
qhull_p.lib;
qhull_r.lib;
qhull.lib;
qhullcpp.lib;
qhullstatic.lib;
qhullstatic_r.lib;
flann.lib;
flann_cpp.lib;
flann_cpp_s.lib;
flann_s.lib;
註釋:提取文件夾中.lib文件名總是會出現錯誤,下面是自己動手豐衣足食型:
例:提取D:\PCL 1.8.1\3rdParty\VTK\lib下的所有靜態鏈接庫文件名並存儲至文本.txt,方法如下:
1、win+r
2、輸入:cmd回車
3、輸入:cd /d D:\PCL 1.8.1\3rdParty\VTK\lib 回車
4、輸入:dir /b *.lib *>0.txt 回車
6、配置屬性-->調試-->環境,設置的內容如下:
PATH=$(PCL_ROOT)bin;$(PCL_ROOT)3rdPartyFLANNbin;$(PCL_ROOT)3rdPartyVTKbin;$(PCL_ROOT)Qhullbin;$(PCL_ROOT)3rdPartyOpenNI2Tools;$(PATH)
例子:
rabbit.pcd文件在前面的網盤中,代碼如下:
#include<pcl/visualization/cloud_viewer.h>
#include<iostream>
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/io/ply_io.h>
#include<pcl/point_types.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] = "F:\\work_source\\TCCL\\ReadData\\ReadData\\src\\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.showCloud(cloud);
viewer.runOnVisualizationThreadOnce(viewerOneOff);
system("pause");
return 0;
}