一、背景
1. Qt 已经正确安装完毕
本人安装的为qt-opensource-windows-x86-5.9.3.exe, 编译器为msvc2013_64
2. PCL安装包
本人下载的是PCL-1.8.0-AllInOne-msvc2013-win64.exe,集成vtk、opengl的
链接:https://pan.baidu.com/s/1CbY7xat9I5BlFTaRqmgL5g 密码:8pli
读者可自行在官网下载最新版本http://pointclouds.org,注意需要与你安装的Qt编译器对应
3.源码+测试数据
链接:https://pan.baidu.com/s/1UwPQpQan284AIzss4Uo6iA
提取码:1c2h
二、安装PCL
1. 直接运行PCL安装包,按照默认设置安装即可。
(1)注意自行设置安装路径
(2)注意修改默认路径中空格符号(因为Qt无法读取空格和中文字符)
(3)安装Opengl时,修改路径为***\PCL1.8.0\3rdParty\OpenNI2(目的是为了便于后期在Qt中配置)
2. 安装完毕后,添加库文件系统环境变量,并重启电脑
3. Qt中配置PCL
1) 新建Qt简单控制台程序
2)在*.pro中配置库文件路径和lib
(a)LIBS配置有点长,网上有些文章说是可以用*.lib\代替所有lib文件,但本人实验过,没成功,故将所有lib包括进去
(b)注意添加lib时,debug和release文件的区别,本人首次配置时,没将两者区分开,程序编译报错。
(c)读者配置文件时需要替文件路径
INCLUDEPATH += C:/Tool/PCL/PCL1.8.0/include/pcl-1.8\
INCLUDEPATH += C:/Tool/PCL/PCL1.8.0/include/pcl-1.8/pcl\
INCLUDEPATH += C:/Tool/PCL/PCL1.8.0/3rdParty/Boost/include/boost-1_59\
INCLUDEPATH += C:/Tool/PCL/PCL1.8.0/3rdParty/Eigen/eigen3\
INCLUDEPATH += C:/Tool/PCL/PCL1.8.0/3rdParty/FLANN/include\
INCLUDEPATH += C:/Tool/PCL/PCL1.8.0/3rdParty/FLANN/include/flann\
INCLUDEPATH += C:/Tool/PCL/PCL1.8.0/3rdParty/OpenNI2/Include\
INCLUDEPATH += C:/Tool/PCL/PCL1.8.0/3rdParty/Qhull/include\
INCLUDEPATH += C:/Tool/PCL/PCL1.8.0/3rdParty/VTK/include/vtk-7.0\
CONFIG(debug,debug|release){
LIBS += -LC:/Tool/PCL/PCL1.8.0/lib\
-lpcl_apps_debug\
-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_simulation_debug\
-lpcl_stereo_debug\
-lpcl_surface_debug\
-lpcl_tracking_debug\
-lpcl_visualization_debug\
LIBS += -LC:/Tool/PCL/PCL1.8.0/3rdParty/Boost/lib\
-llibboost_atomic-vc120-mt-gd-1_59\
-llibboost_chrono-vc120-mt-gd-1_59\
-llibboost_container-vc120-mt-gd-1_59\
-llibboost_context-vc120-mt-gd-1_59\
-llibboost_coroutine-vc120-mt-gd-1_59\
-llibboost_date_time-vc120-mt-gd-1_59\
-llibboost_exception-vc120-mt-gd-1_59\
-llibboost_filesystem-vc120-mt-gd-1_59\
-llibboost_graph-vc120-mt-gd-1_59\
-llibboost_iostreams-vc120-mt-gd-1_59\
-llibboost_locale-vc120-mt-gd-1_59\
-llibboost_log-vc120-mt-gd-1_59\
-llibboost_log_setup-vc120-mt-gd-1_59\
-llibboost_math_c99-vc120-mt-gd-1_59\
-llibboost_math_c99f-vc120-mt-gd-1_59\
-llibboost_math_c99l-vc120-mt-gd-1_59\
-llibboost_math_tr1-vc120-mt-gd-1_59\
-llibboost_math_tr1f-vc120-mt-gd-1_59\
-llibboost_math_tr1l-vc120-mt-gd-1_59\
-llibboost_mpi-vc120-mt-gd-1_59\
-llibboost_prg_exec_monitor-vc120-mt-gd-1_59\
-llibboost_program_options-vc120-mt-gd-1_59\
-llibboost_random-vc120-mt-gd-1_59\
-llibboost_regex-vc120-mt-gd-1_59\
-llibboost_serialization-vc120-mt-gd-1_59\
-llibboost_signals-vc120-mt-gd-1_59\
-llibboost_system-vc120-mt-gd-1_59\
-llibboost_test_exec_monitor-vc120-mt-gd-1_59\
-llibboost_thread-vc120-mt-gd-1_59\
-llibboost_timer-vc120-mt-gd-1_59\
-llibboost_unit_test_framework-vc120-mt-gd-1_59\
-llibboost_wave-vc120-mt-gd-1_59\
-llibboost_wserialization-vc120-mt-gd-1_59
LIBS += -LC:/Tool/PCL/PCL1.8.0/3rdParty/FLANN/lib\
-lflann-gd\
-lflann_cpp_s-gd\
-lflann_s-gd
LIBS += -LC:/Tool/PCL/PCL1.8.0/3rdParty/OpenNI2/Lib\
-lOpenNI2
LIBS += -LC:/Tool/PCL/PCL1.8.0/3rdParty/Qhull/lib\
-lqhull-gd\
-lqhullcpp-gd\
-lqhullstatic-gd\
-lqhullstatic_r-gd\
-lqhull_p-gd\
-lqhull_r-gd
LIBS += -LC:\Tool\PCL\PCL1.8.0\3rdParty\VTK\lib\
-lvtkalglib-7.0-gd\
-lvtkChartsCore-7.0-gd\
-lvtkCommonColor-7.0-gd\
-lvtkCommonComputationalGeometry-7.0-gd\
-lvtkCommonCore-7.0-gd\
-lvtkCommonDataModel-7.0-gd\
-lvtkCommonExecutionModel-7.0-gd\
-lvtkCommonMath-7.0-gd\
-lvtkCommonMisc-7.0-gd\
-lvtkCommonSystem-7.0-gd\
-lvtkCommonTransforms-7.0-gd\
-lvtkDICOMParser-7.0-gd\
-lvtkDomainsChemistry-7.0-gd\
-lvtkDomainsChemistryOpenGL2-7.0-gd\
-lvtkexoIIc-7.0-gd\
-lvtkexpat-7.0-gd\
-lvtkFiltersAMR-7.0-gd\
-lvtkFiltersCore-7.0-gd\
-lvtkFiltersExtraction-7.0-gd\
-lvtkFiltersFlowPaths-7.0-gd\
-lvtkFiltersGeneral-7.0-gd\
-lvtkFiltersGeneric-7.0-gd\
-lvtkFiltersGeometry-7.0-gd\
-lvtkFiltersHybrid-7.0-gd\
-lvtkFiltersHyperTree-7.0-gd\
-lvtkFiltersImaging-7.0-gd\
-lvtkFiltersModeling-7.0-gd\
-lvtkFiltersParallel-7.0-gd\
-lvtkFiltersParallelImaging-7.0-gd\
-lvtkFiltersProgrammable-7.0-gd\
-lvtkFiltersSelection-7.0-gd\
-lvtkFiltersSMP-7.0-gd\
-lvtkFiltersSources-7.0-gd\
-lvtkFiltersStatistics-7.0-gd\
-lvtkFiltersTexture-7.0-gd\
-lvtkFiltersVerdict-7.0-gd\
-lvtkfreetype-7.0-gd\
-lvtkGeovisCore-7.0-gd\
-lvtkglew-7.0-gd\
-lvtkGUISupportQt-7.0-gd\
-lvtkGUISupportQtSQL-7.0-gd\
-lvtkhdf5-7.0-gd\
-lvtkhdf5_hl-7.0-gd\
-lvtkImagingColor-7.0-gd\
-lvtkImagingCore-7.0-gd\
-lvtkImagingFourier-7.0-gd\
-lvtkImagingGeneral-7.0-gd\
-lvtkImagingHybrid-7.0-gd\
-lvtkImagingMath-7.0-gd\
-lvtkImagingMorphological-7.0-gd\
-lvtkImagingSources-7.0-gd\
-lvtkImagingStatistics-7.0-gd\
-lvtkImagingStencil-7.0-gd\
-lvtkInfovisCore-7.0-gd\
-lvtkInfovisLayout-7.0-gd\
-lvtkInteractionImage-7.0-gd\
-lvtkInteractionStyle-7.0-gd\
-lvtkInteractionWidgets-7.0-gd\
-lvtkIOAMR-7.0-gd\
-lvtkIOCore-7.0-gd\
-lvtkIOEnSight-7.0-gd\
-lvtkIOExodus-7.0-gd\
-lvtkIOExport-7.0-gd\
-lvtkIOGeometry-7.0-gd\
-lvtkIOImage-7.0-gd\
-lvtkIOImport-7.0-gd\
-lvtkIOInfovis-7.0-gd\
-lvtkIOLegacy-7.0-gd\
-lvtkIOLSDyna-7.0-gd\
-lvtkIOMINC-7.0-gd\
-lvtkIOMovie-7.0-gd\
-lvtkIONetCDF-7.0-gd\
-lvtkIOParallel-7.0-gd\
-lvtkIOParallelXML-7.0-gd\
-lvtkIOPLY-7.0-gd\
-lvtkIOSQL-7.0-gd\
-lvtkIOVideo-7.0-gd\
-lvtkIOXML-7.0-gd\
-lvtkIOXMLParser-7.0-gd\
-lvtkjpeg-7.0-gd\
-lvtkjsoncpp-7.0-gd\
-lvtklibxml2-7.0-gd\
-lvtkmetaio-7.0-gd\
-lvtkNetCDF-7.0-gd\
-lvtkNetCDF_cxx-7.0-gd\
-lvtkoggtheora-7.0-gd\
-lvtkParallelCore-7.0-gd\
-lvtkpng-7.0-gd\
-lvtkproj4-7.0-gd\
-lvtkRenderingAnnotation-7.0-gd\
-lvtkRenderingContext2D-7.0-gd\
-lvtkRenderingContextOpenGL2-7.0-gd\
-lvtkRenderingCore-7.0-gd\
-lvtkRenderingFreeType-7.0-gd\
-lvtkRenderingImage-7.0-gd\
-lvtkRenderingLabel-7.0-gd\
-lvtkRenderingLOD-7.0-gd\
-lvtkRenderingOpenGL2-7.0-gd\
-lvtkRenderingQt-7.0-gd\
-lvtkRenderingVolume-7.0-gd\
-lvtkRenderingVolumeOpenGL2-7.0-gd\
-lvtksqlite-7.0-gd\
-lvtksys-7.0-gd\
-lvtktiff-7.0-gd\
-lvtkverdict-7.0-gd\
-lvtkViewsContext2D-7.0-gd\
-lvtkViewsCore-7.0-gd\
-lvtkViewsInfovis-7.0-gd\
-lvtkViewsQt-7.0-gd\
-lvtkzlib-7.0-gd
} else {
LIBS += -LC:/Tool/PCL/PCL1.8.0/lib\
-lpcl_apps_release\
-lpcl_common_release\
-lpcl_features_release\
-lpcl_filters_release\
-lpcl_io_release\
-lpcl_io_ply_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_simulation_release\
-lpcl_stereo_release\
-lpcl_surface_release\
-lpcl_tracking_release\
-lpcl_visualization_release\
LIBS += -LC:/Tool/PCL/PCL1.8.0/3rdParty/Boost/lib\
-llibboost_atomic-vc120-mt-1_59\
-llibboost_chrono-vc120-mt-1_59\
-llibboost_container-vc120-mt-1_59\
-llibboost_context-vc120-mt-1_59\
-llibboost_coroutine-vc120-mt-1_59\
-llibboost_date_time-vc120-mt-1_59\
-llibboost_exception-vc120-mt-1_59\
-llibboost_filesystem-vc120-mt-1_59\
-llibboost_graph-vc120-mt-1_59\
-llibboost_iostreams-vc120-mt-1_59\
-llibboost_locale-vc120-mt-1_59\
-llibboost_log-vc120-mt-1_59\
-llibboost_log_setup-vc120-mt-1_59\
-llibboost_math_c99-vc120-mt-1_59\
-llibboost_math_c99f-vc120-mt-1_59\
-llibboost_math_c99l-vc120-mt-1_59\
-llibboost_math_tr1-vc120-mt-1_59\
-llibboost_math_tr1f-vc120-mt-1_59\
-llibboost_math_tr1l-vc120-mt-1_59\
-llibboost_mpi-vc120-mt-1_59\
-llibboost_prg_exec_monitor-vc120-mt-1_59\
-llibboost_program_options-vc120-mt-1_59\
-llibboost_random-vc120-mt-1_59\
-llibboost_regex-vc120-mt-1_59\
-llibboost_serialization-vc120-mt-1_59\
-llibboost_signals-vc120-mt-1_59\
-llibboost_system-vc120-mt-1_59\
-llibboost_test_exec_monitor-vc120-mt-1_59\
-llibboost_thread-vc120-mt-1_59\
-llibboost_timer-vc120-mt-1_59\
-llibboost_unit_test_framework-vc120-mt-1_59\
-llibboost_wave-vc120-mt-1_59\
-llibboost_wserialization-vc120-mt-1_59
LIBS += -LC:/Tool/PCL/PCL1.8.0/3rdParty/FLANN/lib\
-lflann\
-lflann_cpp_s\
-lflann_s
LIBS += -LC:/Tool/PCL/PCL1.8.0/3rdParty/OpenNI2/Lib\
-lOpenNI2
LIBS += -LC:/Tool/PCL/PCL1.8.0/3rdParty/Qhull/lib\
-lqhull\
-lqhullcpp\
-lqhullstatic\
-lqhullstatic_r\
-lqhull_p\
-lqhull_r
LIBS += -LC:\Tool\PCL\PCL1.8.0\3rdParty\VTK\lib\
-lvtkalglib-7.0\
-lvtkChartsCore-7.0\
-lvtkCommonColor-7.0\
-lvtkCommonComputationalGeometry-7.0\
-lvtkCommonCore-7.0\
-lvtkCommonDataModel-7.0\
-lvtkCommonExecutionModel-7.0\
-lvtkCommonMath-7.0\
-lvtkCommonMisc-7.0\
-lvtkCommonSystem-7.0\
-lvtkCommonTransforms-7.0\
-lvtkDICOMParser-7.0\
-lvtkDomainsChemistry-7.0\
-lvtkDomainsChemistryOpenGL2-7.0\
-lvtkexoIIc-7.0\
-lvtkexpat-7.0\
-lvtkFiltersAMR-7.0\
-lvtkFiltersCore-7.0\
-lvtkFiltersExtraction-7.0\
-lvtkFiltersFlowPaths-7.0\
-lvtkFiltersGeneral-7.0\
-lvtkFiltersGeneric-7.0\
-lvtkFiltersGeometry-7.0\
-lvtkFiltersHybrid-7.0\
-lvtkFiltersHyperTree-7.0\
-lvtkFiltersImaging-7.0\
-lvtkFiltersModeling-7.0\
-lvtkFiltersParallel-7.0\
-lvtkFiltersParallelImaging-7.0\
-lvtkFiltersProgrammable-7.0\
-lvtkFiltersSelection-7.0\
-lvtkFiltersSMP-7.0\
-lvtkFiltersSources-7.0\
-lvtkFiltersStatistics-7.0\
-lvtkFiltersTexture-7.0\
-lvtkFiltersVerdict-7.0\
-lvtkfreetype-7.0\
-lvtkGeovisCore-7.0\
-lvtkglew-7.0\
-lvtkGUISupportQt-7.0\
-lvtkGUISupportQtSQL-7.0\
-lvtkhdf5-7.0\
-lvtkhdf5_hl-7.0\
-lvtkImagingColor-7.0\
-lvtkImagingCore-7.0\
-lvtkImagingFourier-7.0\
-lvtkImagingGeneral-7.0\
-lvtkImagingHybrid-7.0\
-lvtkImagingMath-7.0\
-lvtkImagingMorphological-7.0\
-lvtkImagingSources-7.0\
-lvtkImagingStatistics-7.0\
-lvtkImagingStencil-7.0\
-lvtkInfovisCore-7.0\
-lvtkInfovisLayout-7.0\
-lvtkInteractionImage-7.0\
-lvtkInteractionStyle-7.0\
-lvtkInteractionWidgets-7.0\
-lvtkIOAMR-7.0\
-lvtkIOCore-7.0\
-lvtkIOEnSight-7.0\
-lvtkIOExodus-7.0\
-lvtkIOExport-7.0\
-lvtkIOGeometry-7.0\
-lvtkIOImage-7.0\
-lvtkIOImport-7.0\
-lvtkIOInfovis-7.0\
-lvtkIOLegacy-7.0\
-lvtkIOLSDyna-7.0\
-lvtkIOMINC-7.0\
-lvtkIOMovie-7.0\
-lvtkIONetCDF-7.0\
-lvtkIOParallel-7.0\
-lvtkIOParallelXML-7.0\
-lvtkIOPLY-7.0\
-lvtkIOSQL-7.0\
-lvtkIOVideo-7.0\
-lvtkIOXML-7.0\
-lvtkIOXMLParser-7.0\
-lvtkjpeg-7.0\
-lvtkjsoncpp-7.0\
-lvtklibxml2-7.0\
-lvtkmetaio-7.0\
-lvtkNetCDF-7.0\
-lvtkNetCDF_cxx-7.0\
-lvtkoggtheora-7.0\
-lvtkParallelCore-7.0\
-lvtkpng-7.0\
-lvtkproj4-7.0\
-lvtkRenderingAnnotation-7.0\
-lvtkRenderingContext2D-7.0\
-lvtkRenderingContextOpenGL2-7.0\
-lvtkRenderingCore-7.0\
-lvtkRenderingFreeType-7.0\
-lvtkRenderingImage-7.0\
-lvtkRenderingLabel-7.0\
-lvtkRenderingLOD-7.0\
-lvtkRenderingOpenGL2-7.0\
-lvtkRenderingQt-7.0\
-lvtkRenderingVolume-7.0\
-lvtkRenderingVolumeOpenGL2-7.0\
-lvtksqlite-7.0\
-lvtksys-7.0\
-lvtktiff-7.0\
-lvtkverdict-7.0\
-lvtkViewsContext2D-7.0\
-lvtkViewsCore-7.0\
-lvtkViewsInfovis-7.0\
-lvtkViewsQt-7.0\
-lvtkzlib-7.0
}
4. 调试结果
#include <QCoreApplication>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/obj_io.h>
#include <pcl/PolygonMesh.h>
#include <pcl/point_cloud.h>
#include <pcl/io/vtk_lib_io.h>//loadPolygonFileOBJ所属头文件;
#include <pcl/visualization/pcl_visualizer.h>
int main()
{
std::string fileName = "chahu.obj";
pcl::PolygonMesh meshData;//读取原始数据
pcl::io::loadPolygonFile(fileName,meshData);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
pcl::fromPCLPointCloud2(meshData.cloud, *cloud);//将obj数据转换为点云数据
// 显示结果图
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
viewer->setBackgroundColor (0, 0, 0); //设置背景
viewer->addCoordinateSystem (15.0); //设置坐标系
viewer->initCameraParameters ();
viewer->addPointCloud(cloud, "show");
while (!viewer->wasStopped())
{
viewer->spinOnce (100);
boost::this_thread::sleep (boost::posix_time::microseconds (100000));
}
}