工具:
PCL1.8.0
Visual Studio 2013(Uitimate)
QT5.9.1(MSVC2013)
CBD debugger(win10SDK)官网下载
若需要在VS中使用QT显示界面还需下载qt-vsaddin-msvc2013-2.2.0.vsix官网下载
环境:
win7旗舰版,64位系统
一、安装工具
VS2013根据提示安装即可,PCL相应安装在另一篇博客中。
建议安装顺序VS、Qt、qt-vsaddin。
1、QT安装:
首先打开安装包,可跳过Qt账户登录
然后选择QT组件。
编译器选择了MinGW构件和msvc2013 64-bit构件。
Tools下建议选择MinGW+CDB Debugger。
“Qt 5.9.1”节点下面是 Qt 的功能模块,包括用于不同编译器和平台的模块,这些模块包括内容如下:
① MinGW 5.3.0 32 bit 编译器模块。MinGW 是 Minimalist GNU for Windows 的缩写,MinGW是 Windows 平台上使用的 GNU 工具集导入库的集合。
② 用于 UWP 编译的模块。UWP 是 Windows 10 中 Universal Windows Platform 的简称,有不同编译器类型的 UWP。
③ 用于 windows 平台上的 MSVC 编译器模块,如 msvc2015 32-bit 和 msvc2015 64-bit 等。要安装 MSVC 编译器的模块,需要计算机上已经安装相应版本的 Visual Studio。
④ 用于 Android 平台的模块,如 Android x86 和 Android ARMv7。
⑤ Sources 模块是 Qt 的源程序。
⑥ Qt Charts 是二维图表模块,用于绘制柱状图、饼图、曲线图等常用二维图表。
⑦ Qt Data Visualization 是三维数据图表模块,用于数据的三维显示,如散点的三维空间分布、三维曲面等。
⑧ Qt Purchasing、Qt WebEngine、Qt Network Auth(TP)等其他模块,括号里的 TP 表示技术预览(Technology Preview)。
⑨ Qt Scritp(Deprecated)是脚本模块,括号里的“Deprecated”表示这是已经过时的模块。
后带有TP的为预展示模块,一般不选择。
“Tools”节点下面是一些工具软件,包括内容如下:
① Qt Creator 4.3.1 是用于 Qt 程序开发的 IDE,强制安装。
② 用于和 CDB 调试工具对接,默认安装,一般用于调试 VC 编译的 Qt 程序。
③ MinGW 5.3.0 是 MinGW 编译工具链。
④ Strawberry Perl 是一个 Perl 语言工具,一般不选择。
最后根据导向一步步操作,完成QT安装。
2、安装CBD(Win10SDK)
由于Qt没有配有msvc的调试器,需要下载Win10SKD。
解压缩镜像文件后,在文件夹内打开winsdksetup.exe,只勾选 Debugging tools for Windows 安装即可。因为只用WIN10SDK中的debugger,所以可以在win7上面使用。
二、QT配置PCL
1、构建msvc套件
首先在工具中打开选项
接着添加新安装的调试器
选择安装好的debug tools for windows文件夹下的cbd.exe,并更改调试器名称。
在构建套件的Desktop Qt5.9.1msv2013中选择刚添加的调试器,完成MSVC2013套件构建。
2、连接PCL库
在 .pro 文件中添加如下配置
INCLUDEPATH += D:/PCL-1.8/PCL1.8.0/include/pcl-1.8\
INCLUDEPATH += D:/PCL-1.8/PCL1.8.0/include/pcl-1.8/pcl\
INCLUDEPATH += D:/PCL-1.8/PCL1.8.0/3rdParty/Boost/include/boost-1_59\
INCLUDEPATH += D:/PCL-1.8/PCL1.8.0/3rdParty/Eigen/eigen3\
INCLUDEPATH += D:/PCL-1.8/PCL1.8.0/3rdParty/FLANN/include\
INCLUDEPATH += D:/PCL-1.8/PCL1.8.0/3rdParty/FLANN/include/flann\
INCLUDEPATH += D:/PCL-1.8/PCL1.8.0/3rdParty/OpenNI2/Include\
INCLUDEPATH += D:/PCL-1.8/PCL1.8.0/3rdParty/Qhull/include\
INCLUDEPATH += D:/PCL-1.8/PCL1.8.0/3rdParty/VTK/include/vtk-7.0\
CONFIG(debug,debug|release){
LIBS += -LD:/PCL-1.8/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 += -LD:/PCL-1.8/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 += -LD:/PCL-1.8/PCL1.8.0/3rdParty/FLANN/lib\
-lflann-gd\
-lflann_cpp_s-gd\
-lflann_s-gd
LIBS += -LD:/PCL-1.8/PCL1.8.0/3rdParty/OpenNI2/Lib\
-lOpenNI2
LIBS += -LD:/PCL-1.8/PCL1.8.0/3rdParty/Qhull/lib\
-lqhull-gd\
-lqhullcpp-gd\
-lqhullstatic-gd\
-lqhullstatic_r-gd\
-lqhull_p-gd\
-lqhull_r-gd
LIBS += -LD:/PCL-1.8/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 += -LD:/PCL-1.8/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 += -LD:/PCL-1.8/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 += -LD:/PCL-1.8/PCL1.8.0/3rdParty/FLANN/lib\
-lflann\
-lflann_cpp_s\
-lflann_s
LIBS += -LD:/PCL-1.8/PCL1.8.0/3rdParty/OpenNI2/Lib\
-lOpenNI2
LIBS += -LD:/PCL-1.8/PCL1.8.0/3rdParty/Qhull/lib\
-lqhull\
-lqhullcpp\
-lqhullstatic\
-lqhullstatic_r\
-lqhull_p\
-lqhull_r
LIBS += -LD:/PCL-1.8/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
}
完成配置
测试代码:
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
int user_data;
void viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
viewer.setBackgroundColor(1.0, 0.5, 1.0);
pcl::PointXYZ o;
o.x = 1.0;
o.y = 0;
o.z = 0;
viewer.addSphere(o, 0.25, "sphere", 0);
std::cout << "i only run once" << std::endl;
}
void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
static unsigned count = 0;
std::stringstream ss;
ss << "Once per viewer loop: " << count++;
viewer.removeShape("text", 0);
viewer.addText(ss.str(), 200, 300, "text", 0);
//FIXME: possible race condition here:
user_data++;
}
int main()
{
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile("my_point_cloud.pcd", *cloud);
pcl::visualization::CloudViewer viewer("Cloud Viewer");
//blocks until the cloud is actually rendered
viewer.showCloud(cloud);
//use the following functions to get access to the underlying more advanced/powerful
//PCLVisualizer
//This will only get called once
viewer.runOnVisualizationThreadOnce(viewerOneOff);
//This will get called once per visualization iteration
viewer.runOnVisualizationThread(viewerPsycho);
while (!viewer.wasStopped())
{
//you can also do cool processing here
//FIXME: Note that this is running in a separate thread from viewerPsycho
//and you should guard against race conditions yourself...
user_data++;
}
return 0;
}
参考文章:
https://blog.csdn.net/qq_34719188/article/details/80601642
https://blog.csdn.net/knaha/article/details/103498141