1.准備工作
我所用的開發環境是win10下的qt5.11.2配置了vs2017的編譯器,根據自己所用的VS的版本去官網下載對應版本的pcl庫,如下
PCL-1.8.1-AllInOne-msvc2017-win64.exe
pcl-1.8.1-pdb-msvc2017-win64.zip
另外還需要下載對應版本的vtk依賴庫
vtk-v8.0.0.zip
注:上面的PCL-1.8.1-AllInOne-msvc2017-win64.exe,安裝后,pcl庫以及它的第三方依賴庫(boost 、Eigen、FLANN、OpenNI2、Qhull、 VTK)都會安裝完成,這里面的vtk不適合Qt,
所以要重新在自己的編譯環境下進行編譯。
2.pcl庫的安裝
注:網上關於pcl庫的安裝有很多,接下來是我進行安裝時的幾個注意的地方
(1)安裝到這一步時,選擇第二個選項。
(2)注意此處的空格,要刪掉空格,否則qt無法檢測有空格的文件夾(路徑可更改,不一定要安裝在c盤中)
我的是安裝在D盤下。
(3)OpenNI2的安裝
pcl安裝過程中會彈框提示安裝OpenNI2,要將OpenNI2安裝到pcl1.8.1的3rdParty目錄下
注:此處安裝的時候,可能會提示OpenNI2安裝路徑太長,這個不需要理會。
(4)最后一步安裝完成,為pcl庫以及依賴庫添加環境變量(最好添加后,重啟電腦)
pcl FLANN Qhull VTK OpenNI2 這五個庫需要添加環境變量(vtk可先不添加,后面要重新編譯)
3.VTK的編譯(cmake)
前面我們安裝的pcl庫中包含了預編譯的VTK庫,但是預編譯的VTK包並沒有與qt聯合編譯生成QVTKWidget控件(該控件用來在qt上進行顯示點雲),所以需要單獨編譯vtk。
注:單獨下載的版本必須是與pcl對應一樣的版本(vtk-8.0)
(1)解壓vtk包到3rdParty目錄下,在vtk-8.0目錄下新建build文件夾,將路徑填入到cmake下,點擊Add Entry,添加Name為CMAKE_DEBUG_POSTFIX,Type為STRING,Value為-gd,點擊Ok。這是為了將最后生成的debug和release版本的lib區別開。
(2)點擊Configure,選擇VisualStudio 15 2017 Win64,點擊Finish,等待配置完成。
配置列表設置
BUILD選項:
BUILD_EXAMPLES,BUILD_SHADRED_LIBS,BUILD_TESTING
一般情況下把只需要勾選BUILD_SHADRED_LIBS,看個人需要進行選擇,我只勾選了BUILD_SHADRED_LIBS。
VTK安裝目錄
CMAKE_INSTALL_POSTFIX
注:將上面pcl預編譯的vtk文件夾清空,將CMAKE_INSTALL_POSTFIX 設置為被清空的vtk文件夾路徑
最后勾選VTK_Group_Qt
(3)單擊Configure,等待配置結束。
INCLUDEPATH += E:\qt_workplace\qt_project\pcl_tool\PCL1.8.1/include/pcl-1.8\ INCLUDEPATH += E:\qt_workplace\qt_project\pcl_tool\PCL1.8.1/include/pcl-1.8/pcl\ INCLUDEPATH += E:\qt_workplace\qt_project\pcl_tool\PCL1.8.1/3rdParty/Boost/include/boost-1_64\ INCLUDEPATH += E:\qt_workplace\qt_project\pcl_tool\PCL1.8.1/3rdParty/Eigen/eigen3\ INCLUDEPATH += E:\qt_workplace\qt_project\pcl_tool\PCL1.8.1/3rdParty/FLANN/include\ INCLUDEPATH += E:\qt_workplace\qt_project\pcl_tool\PCL1.8.1/3rdParty/FLANN/include/flann\ INCLUDEPATH += E:\qt_workplace\qt_project\pcl_tool\PCL1.8.1/3rdParty/OpenNI2/Include\ INCLUDEPATH += E:\qt_workplace\qt_project\pcl_tool\PCL1.8.1/3rdParty/Qhull/include\ INCLUDEPATH += E:\qt_workplace\qt_project\pcl_tool\PCL1.8.1/3rdParty/VTK/include/vtk-8.0\ CONFIG(debug,debug|release){ LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/lib\ -lpcl_common_debug\ -lpcl_features_debug\ -lpcl_filters_debug\ -lpcl_io_debug\ -lpcl_io_ply_debug\ -lpcl_kdtree_debug\ -lpcl_keypoints_debug\ -lpcl_ml_debug\ -lpcl_octree_debug\ -lpcl_outofcore_debug\ -lpcl_people_debug\ -lpcl_recognition_debug\ -lpcl_registration_debug\ -lpcl_sample_consensus_debug\ -lpcl_search_debug\ -lpcl_segmentation_debug\ -lpcl_stereo_debug\ -lpcl_surface_debug\ -lpcl_tracking_debug\ -lpcl_visualization_debug\ LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/3rdParty/Boost/lib\ -llibboost_atomic-vc141-mt-gd-1_64\ -llibboost_bzip2-vc141-mt-gd-1_64\ -llibboost_chrono-vc141-mt-gd-1_64\ -llibboost_container-vc141-mt-gd-1_64\ -llibboost_context-vc141-mt-gd-1_64\ -llibboost_coroutine-vc141-mt-gd-1_64\ -llibboost_date_time-vc141-mt-gd-1_64\ -llibboost_exception-vc141-mt-gd-1_64\ -llibboost_fiber-vc141-mt-gd-1_64\ -llibboost_filesystem-vc141-mt-gd-1_64\ -llibboost_graph-vc141-mt-gd-1_64\ -llibboost_graph_parallel-vc141-mt-gd-1_64\ -llibboost_iostreams-vc141-mt-gd-1_64\ -llibboost_locale-vc141-mt-gd-1_64\ -llibboost_log-vc141-mt-gd-1_64\ -llibboost_log_setup-vc141-mt-gd-1_64\ -llibboost_math_c99-vc141-mt-gd-1_64\ -llibboost_math_c99f-vc141-mt-gd-1_64\ -llibboost_math_c99l-vc141-mt-gd-1_64\ -llibboost_math_tr1-vc141-mt-gd-1_64\ -llibboost_math_tr1f-vc141-mt-gd-1_64\ -llibboost_math_tr1l-vc141-mt-gd-1_64\ -llibboost_mpi-vc141-mt-gd-1_64\ -llibboost_numpy-vc141-mt-gd-1_64\ -llibboost_numpy3-vc141-mt-gd-1_64\ -llibboost_prg_exec_monitor-vc141-mt-gd-1_64\ -llibboost_program_options-vc141-mt-gd-1_64\ -llibboost_python-vc141-mt-gd-1_64\ -llibboost_python3-vc141-mt-gd-1_64\ -llibboost_random-vc141-mt-gd-1_64\ -llibboost_regex-vc141-mt-gd-1_64\ -llibboost_serialization-vc141-mt-gd-1_64\ -llibboost_signals-vc141-mt-gd-1_64\ -llibboost_system-vc141-mt-gd-1_64\ -llibboost_test_exec_monitor-vc141-mt-gd-1_64\ -llibboost_thread-vc141-mt-gd-1_64\ -llibboost_timer-vc141-mt-gd-1_64\ -llibboost_type_erasure-vc141-mt-gd-1_64\ -llibboost_unit_test_framework-vc141-mt-gd-1_64\ -llibboost_wave-vc141-mt-gd-1_64\ -llibboost_wserialization-vc141-mt-gd-1_64\ -llibboost_zlib-vc141-mt-gd-1_64\ LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/3rdParty/FLANN/lib\ -lflann-gd\ -lflann_cpp-gd\ -lflann_cpp_s-gd\ -lflann_s-gd\ LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/3rdParty/OpenNI2/Lib\ -lOpenNI2\ LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/3rdParty/Qhull/lib\ -lqhull_d\ -lqhull_p_d\ -lqhull_r_d\ -lqhullcpp_d\ -lqhullstatic_d\ -lqhullstatic_r_d\ LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/3rdParty/VTK/lib\ -lvtkChartsCore-8.0-gd\ -lvtkCommonColor-8.0-gd\ -lvtkCommonComputationalGeometry-8.0-gd\ -lvtkCommonCore-8.0-gd\ -lvtkCommonDataModel-8.0-gd\ -lvtkCommonExecutionModel-8.0-gd\ -lvtkCommonMath-8.0-gd\ -lvtkCommonMisc-8.0-gd\ -lvtkCommonSystem-8.0-gd\ -lvtkCommonTransforms-8.0-gd\ -lvtkDICOMParser-8.0-gd\ -lvtkDomainsChemistry-8.0-gd\ -lvtkDomainsChemistryOpenGL2-8.0-gd\ -lvtkFiltersAMR-8.0-gd\ -lvtkFiltersCore-8.0-gd\ -lvtkFiltersExtraction-8.0-gd\ -lvtkFiltersFlowPaths-8.0-gd\ -lvtkFiltersGeneral-8.0-gd\ -lvtkFiltersGeneric-8.0-gd\ -lvtkFiltersGeometry-8.0-gd\ -lvtkFiltersHybrid-8.0-gd\ -lvtkFiltersHyperTree-8.0-gd\ -lvtkFiltersImaging-8.0-gd\ -lvtkFiltersModeling-8.0-gd\ -lvtkFiltersParallel-8.0-gd\ -lvtkFiltersParallelImaging-8.0-gd\ -lvtkFiltersPoints-8.0-gd\ -lvtkFiltersProgrammable-8.0-gd\ -lvtkFiltersSMP-8.0-gd\ -lvtkFiltersSelection-8.0-gd\ -lvtkFiltersSources-8.0-gd\ -lvtkFiltersStatistics-8.0-gd\ -lvtkFiltersTexture-8.0-gd\ -lvtkFiltersTopology-8.0-gd\ -lvtkFiltersVerdict-8.0-gd\ -lvtkGUISupportQt-8.0-gd\ -lvtkGUISupportQtSQL-8.0-gd\ -lvtkGeovisCore-8.0-gd\ -lvtkIOAMR-8.0-gd\ -lvtkIOCore-8.0-gd\ -lvtkIOEnSight-8.0-gd\ -lvtkIOExodus-8.0-gd\ -lvtkIOExport-8.0-gd\ -lvtkIOExportOpenGL2-8.0-gd\ -lvtkIOGeometry-8.0-gd\ -lvtkIOImage-8.0-gd\ -lvtkIOImport-8.0-gd\ -lvtkIOInfovis-8.0-gd\ -lvtkIOLSDyna-8.0-gd\ -lvtkIOLegacy-8.0-gd\ -lvtkIOMINC-8.0-gd\ -lvtkIOMovie-8.0-gd\ -lvtkIONetCDF-8.0-gd\ -lvtkIOPLY-8.0-gd\ -lvtkIOParallel-8.0-gd\ -lvtkIOParallelXML-8.0-gd\ -lvtkIOSQL-8.0-gd\ -lvtkIOTecplotTable-8.0-gd\ -lvtkIOVideo-8.0-gd\ -lvtkIOXML-8.0-gd\ -lvtkIOXMLParser-8.0-gd\ -lvtkImagingColor-8.0-gd\ -lvtkImagingCore-8.0-gd\ -lvtkImagingFourier-8.0-gd\ -lvtkImagingGeneral-8.0-gd\ -lvtkImagingHybrid-8.0-gd\ -lvtkImagingMath-8.0-gd\ -lvtkImagingMorphological-8.0-gd\ -lvtkImagingSources-8.0-gd\ -lvtkImagingStatistics-8.0-gd\ -lvtkImagingStencil-8.0-gd\ -lvtkInfovisCore-8.0-gd\ -lvtkInfovisLayout-8.0-gd\ -lvtkInteractionImage-8.0-gd\ -lvtkInteractionStyle-8.0-gd\ -lvtkInteractionWidgets-8.0-gd\ -lvtkNetCDF-8.0-gd\ -lvtkParallelCore-8.0-gd\ -lvtkRenderingAnnotation-8.0-gd\ -lvtkRenderingContext2D-8.0-gd\ -lvtkRenderingContextOpenGL2-8.0-gd\ -lvtkRenderingCore-8.0-gd\ -lvtkRenderingFreeType-8.0-gd\ -lvtkRenderingGL2PSOpenGL2-8.0-gd\ -lvtkRenderingImage-8.0-gd\ -lvtkRenderingLOD-8.0-gd\ -lvtkRenderingLabel-8.0-gd\ -lvtkRenderingOpenGL2-8.0-gd\ -lvtkRenderingQt-8.0-gd\ -lvtkRenderingVolume-8.0-gd\ -lvtkRenderingVolumeOpenGL2-8.0-gd\ -lvtkViewsContext2D-8.0-gd\ -lvtkViewsCore-8.0-gd\ -lvtkViewsInfovis-8.0-gd\ -lvtkViewsQt-8.0-gd\ -lvtkalglib-8.0-gd\ -lvtkexoIIc-8.0-gd\ -lvtkexpat-8.0-gd\ -lvtkfreetype-8.0-gd\ -lvtkgl2ps-8.0-gd\ -lvtkglew-8.0-gd\ -lvtkhdf5-8.0-gd\ -lvtkhdf5_hl-8.0-gd\ -lvtkjpeg-8.0-gd\ -lvtkjsoncpp-8.0-gd\ -lvtklibharu-8.0-gd\ -lvtklibxml2-8.0-gd\ -lvtklz4-8.0-gd\ -lvtkmetaio-8.0-gd\ -lvtknetcdf_c++-gd\ -lvtkoggtheora-8.0-gd\ -lvtkpng-8.0-gd\ -lvtkproj4-8.0-gd\ -lvtksqlite-8.0-gd\ -lvtksys-8.0-gd\ -lvtktiff-8.0-gd\ -lvtkverdict-8.0-gd\ -lvtkzlib-8.0-gd\ } else { LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/lib\ -lpcl_common_release\ -lpcl_features_release\ -lpcl_filters_release\ -lpcl_io_ply_release\ -lpcl_io_release\ -lpcl_kdtree_release\ -lpcl_keypoints_release\ -lpcl_ml_release\ -lpcl_octree_release\ -lpcl_outofcore_release\ -lpcl_people_release\ -lpcl_recognition_release\ -lpcl_registration_release\ -lpcl_sample_consensus_release\ -lpcl_search_release\ -lpcl_segmentation_release\ -lpcl_stereo_release\ -lpcl_surface_release\ -lpcl_tracking_release\ -lpcl_visualization_release\ LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/3rdParty/Boost/lib\ -llibboost_atomic-vc141-mt-1_64\ -llibboost_bzip2-vc141-mt-1_64\ -llibboost_chrono-vc141-mt-1_64\ -llibboost_container-vc141-mt-1_64\ -llibboost_context-vc141-mt-1_64\ -llibboost_coroutine-vc141-mt-1_64\ -llibboost_date_time-vc141-mt-1_64\ -llibboost_exception-vc141-mt-1_64\ -llibboost_fiber-vc141-mt-1_64\ -llibboost_filesystem-vc141-mt-1_64\ -llibboost_graph-vc141-mt-1_64\ -llibboost_graph_parallel-vc141-mt-1_64\ -llibboost_iostreams-vc141-mt-1_64\ -llibboost_locale-vc141-mt-1_64\ -llibboost_log-vc141-mt-1_64\ -llibboost_log_setup-vc141-mt-1_64\ -llibboost_math_c99-vc141-mt-1_64\ -llibboost_math_c99f-vc141-mt-1_64\ -llibboost_math_c99l-vc141-mt-1_64\ -llibboost_math_tr1-vc141-mt-1_64\ -llibboost_math_tr1f-vc141-mt-1_64\ -llibboost_math_tr1l-vc141-mt-1_64\ -llibboost_mpi-vc141-mt-1_64\ -llibboost_numpy-vc141-mt-1_64\ -llibboost_numpy3-vc141-mt-1_64\ -llibboost_prg_exec_monitor-vc141-mt-1_64\ -llibboost_program_options-vc141-mt-1_64\ -llibboost_python-vc141-mt-1_64\ -llibboost_python3-vc141-mt-1_64\ -llibboost_random-vc141-mt-1_64\ -llibboost_regex-vc141-mt-1_64\ -llibboost_serialization-vc141-mt-1_64\ -llibboost_signals-vc141-mt-1_64\ -llibboost_system-vc141-mt-1_64\ -llibboost_test_exec_monitor-vc141-mt-1_64\ -llibboost_thread-vc141-mt-1_64\ -llibboost_timer-vc141-mt-1_64\ -llibboost_type_erasure-vc141-mt-1_64\ -llibboost_unit_test_framework-vc141-mt-1_64\ -llibboost_wave-vc141-mt-1_64\ -llibboost_wserialization-vc141-mt-1_64\ -llibboost_zlib-vc141-mt-1_64\ LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/3rdParty/FLANN/lib\ -lflann\ -lflann_cpp\ -lflann_cpp_s\ -lflann_s\ -lOpenNI2\ LIBS += -LE:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/3rdParty/Qhull/lib\ -lqhull\ -lqhull_p\ -lqhull_r\ -lqhullcpp\ -lqhullstatic\ -lqhullstatic_r\ LIBS += -E:/qt_workplace/qt_project/pcl_tool/PCL1.8.1/3rdParty/VTK/lib\ -lvtkChartsCore-8.0\ -lvtkCommonColor-8.0\ -lvtkCommonComputationalGeometry-8.0\ -lvtkCommonCore-8.0\ -lvtkCommonDataModel-8.0\ -lvtkCommonExecutionModel-8.0\ -lvtkCommonMath-8.0\ -lvtkCommonMisc-8.0\ -lvtkCommonSystem-8.0\ -lvtkCommonTransforms-8.0\ -lvtkDICOMParser-8.0\ -lvtkDomainsChemistry-8.0\ -lvtkDomainsChemistryOpenGL2-8.0\ -lvtkFiltersAMR-8.0\ -lvtkFiltersCore-8.0\ -lvtkFiltersExtraction-8.0\ -lvtkFiltersFlowPaths-8.0\ -lvtkFiltersGeneral-8.0\ -lvtkFiltersGeneric-8.0\ -lvtkFiltersGeometry-8.0\ -lvtkFiltersHybrid-8.0\ -lvtkFiltersHyperTree-8.0\ -lvtkFiltersImaging-8.0\ -lvtkFiltersModeling-8.0\ -lvtkFiltersParallel-8.0\ -lvtkFiltersParallelImaging-8.0\ -lvtkFiltersPoints-8.0\ -lvtkFiltersProgrammable-8.0\ -lvtkFiltersSMP-8.0\ -lvtkFiltersSelection-8.0\ -lvtkFiltersSources-8.0\ -lvtkFiltersStatistics-8.0\ -lvtkFiltersTexture-8.0\ -lvtkFiltersTopology-8.0\ -lvtkFiltersVerdict-8.0\ -lvtkGUISupportQt-8.0\ -lvtkGUISupportQtSQL-8.0\ -lvtkGeovisCore-8.0\ -lvtkIOAMR-8.0\ -lvtkIOCore-8.0\ -lvtkIOEnSight-8.0\ -lvtkIOExodus-8.0\ -lvtkIOExport-8.0\ -lvtkIOExportOpenGL2-8.0\ -lvtkIOGeometry-8.0\ -lvtkIOImage-8.0\ -lvtkIOImport-8.0\ -lvtkIOInfovis-8.0\ -lvtkIOLSDyna-8.0\ -lvtkIOLegacy-8.0\ -lvtkIOMINC-8.0\ -lvtkIOMovie-8.0\ -lvtkIONetCDF-8.0\ -lvtkIOPLY-8.0\ -lvtkIOParallel-8.0\ -lvtkIOParallelXML-8.0\ -lvtkIOSQL-8.0\ -lvtkIOTecplotTable-8.0\ -lvtkIOVideo-8.0\ -lvtkIOXML-8.0\ -lvtkIOXMLParser-8.0\ -lvtkImagingColor-8.0\ -lvtkImagingCore-8.0\ -lvtkImagingFourier-8.0\ -lvtkImagingGeneral-8.0\ -lvtkImagingHybrid-8.0\ -lvtkImagingMath-8.0\ -lvtkImagingMorphological-8.0\ -lvtkImagingSources-8.0\ -lvtkImagingStatistics-8.0\ -lvtkImagingStencil-8.0\ -lvtkInfovisCore-8.0\ -lvtkInfovisLayout-8.0\ -lvtkInteractionImage-8.0\ -lvtkInteractionStyle-8.0\ -lvtkInteractionWidgets-8.0\ -lvtkNetCDF-8.0\ -lvtkParallelCore-8.0\ -lvtkRenderingAnnotation-8.0\ -lvtkRenderingContext2D-8.0\ -lvtkRenderingContextOpenGL2-8.0\ -lvtkRenderingCore-8.0\ -lvtkRenderingFreeType-8.0\ -lvtkRenderingGL2PSOpenGL2-8.0\ -lvtkRenderingImage-8.0\ -lvtkRenderingLOD-8.0\ -lvtkRenderingLabel-8.0\ -lvtkRenderingOpenGL2-8.0\ -lvtkRenderingQt-8.0\ -lvtkRenderingVolume-8.0\ -lvtkRenderingVolumeOpenGL2-8.0\ -lvtkViewsContext2D-8.0\ -lvtkViewsCore-8.0\ -lvtkViewsInfovis-8.0\ -lvtkViewsQt-8.0\ -lvtkalglib-8.0\ -lvtkexoIIc-8.0\ -lvtkexpat-8.0\ -lvtkfreetype-8.0\ -lvtkgl2ps-8.0\ -lvtkglew-8.0\ -lvtkhdf5-8.0\ -lvtkhdf5_hl-8.0\ -lvtkjpeg-8.0\ -lvtkjsoncpp-8.0\ -lvtklibharu-8.0\ -lvtklibxml2-8.0\ -lvtklz4-8.0\ -lvtkmetaio-8.0\ -lvtknetcdf_c++\ -lvtkoggtheora-8.0\ -lvtkpng-8.0\ -lvtkproj4-8.0\ -lvtksqlite-8.0\ -lvtksys-8.0\ -lvtktiff-8.0\ -lvtkverdict-8.0\ -lvtkzlib-8.0\ }