win10 64位 vs2017 qt5.12.6 pcl1.9.1 vtk8.1.1配置安装步骤

由于我电脑中有 QT5.12.6 VS2017,就不介绍怎么安装了,只介绍cmake,pcl及vtk的配置步骤

为了便于后续QT的调用,以下所有安装路径均不能出现中文及空格等

PCL自带VTK是不完整的,所以需要下载VTK源码进行重新编译使其支持QT。

一:资源链接:

【免费】pcl1.9.1vtk8.1.1cmake3.14.2用于win1064位下,vs2017qt5.12.6资源-CSDN文库https://download.csdn.net/download/u012719076/88146824

资源内容:

 PCL 1.9.1版本对应的VTK版本为8.1,

我选择的VTK 8.1.1版本

先将上述4个文件下载,将所有压缩包解压

二、Cmake安装

点击cmake-3.14.2-win64-x64.msi  按照指示进行操作

注意: 安装路径我没有选择默认路径,我的路径为:D:\ProgramFiles\Cmake

三、pcl安装

(一) PCL-1.9.1-AllInOne-msvc2017-win64.exe 的安装

 1. 双击exe,前两步默认,第三步:选择   Add PCL to the system PATH for all users

2.安装路径 D:\ProgramFiles\PCL\PCL1.9.1 -注意不能有空格

随后步骤 安装路径:我选择了 : D:\ProgramFiles\PCL,

自动生成路径:D:\ProgramFiles\PCL\PCL 1.9.1     注意:这个路径中是有空格的,qt中路径不能识别带空格路径,所以,要把这个空格去掉

最后安装路径为: D:\ProgramFiles\PCL\PCL1.9.1

3. 选择组件时,全部选择--按照默认即可

 4.OpenNI的安装

PCL安装快结束时,会弹出来安装第三方库,我的安装路径为:

D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\OpenNI2 其他按照默认安装即可

(二)解压,拷贝 

解压  pcl-1.9.1-pdb-msvc2017-win64.zip 将所有的pdb文件拷贝到pcl的安装路径下即可

D:\ProgramFiles\PCL\PCL1.9.1\bin

注意:pcl中的vtk不用改动,因为pcl1.9.1中的vtk为8.1.1,与Qt中配置的vtk版本一致

至此PCL安装结束

四、vtk编译

(一)编译步骤:

步骤主要参考下面两篇文章

VS2015 + PCL1.8.0 + QT_5.62 + cmake3.82 编译VTK7.1,生成QVTKWidgetPlugin.dll_恭勤不倦的博客-CSDN博客https://blog.csdn.net/ktony_90/article/details/77966904VTK8.2.0编译安装与测试用例运行(win10 + VS2017 + Qt5,Release+Debug)_vtk 编译时怎么打开测试程序_LiveAn的博客-CSDN博客https://blog.csdn.net/anhec/article/details/86777302

vs+qt+vtk+pcl+cmake下载、安装、配置以及过程中存在的一系列问题解决_vs安装vtk_ych什么都不会的博客-CSDN博客https://blog.csdn.net/m0_74195873/article/details/129910816

0. 先建2个空文件夹用来存放vtk编译程序和安装程序--在想要的安装路径下

 1.以管理员的方式打开cmake,选择好源码路径、编译路径、勾选 Advanced

VS2017+Qt5.12.0+PCL1.9.1开发环境配置过程详细记录_小龙就是爱学习的博客-CSDN博客

可参考这个设置 类型 

(1)点击Add Entry,添加CMAKE_PREFIX_PATH,类型为“PATH”,设置为QT的安装路径。
(2)点击Add Entry,添加CMAKE_DEBUG_POSTFIX,设置为"_d"。用来区分debug与release版本下的dll和lib文件,不然的话创建安装文件的时候debug与release版本,名字相同相互覆盖。

应该选 string  ;我选错了,选了filepath

(3)然后点击  config , 选择 vs2017---x64  其他默认,  配置好后,会冒出一堆红,不要怕,继续。。

 2. 勾选-配置--再次 config
 

 勾选BUILD_SHARED_LIBS,使生成VTK的lib与dll
勾选BUILD_EXAMPLES,使编译生成一些

​勾选VTK_Group_Qt,让VTK支持Qt Application

设置CMAKE_INSTALL_PREFIX目录为VTK安装目录(D:\ProgramFiles\VTK\VTK811\install)

3.确认路径及 再次 config

2步骤点击config后,红色缺少少了很多,这一步主要是请确认红色变量的路径(Qt路径,Examples路径)是否正确,以及Qt的版本是否为5

 此步点击config后,虽然显示config done  还是有红的,确认后再次点击config,直到没有红色的出现

4. 点击Generate

在编译路径builid下 生成vtk工程

(二) vs生成lib与dll

1.打开 vtk工程

用管理员模式打开VS2017, 然后打开工程 VTK.sln

路径在 D:\ProgramFiles\VTK\VTK811\build  

2.debug模式下

(1).编译ALL-BUILD工程  

选择 debug  x64模式, 点击 ALL-BUILD工程, 生成---重新生成ALL-BUILD    编译过程大概一小时

 经过一个小时左右编译结果如下

269>------ 已启动全部重新生成: 项目: ALL_BUILD, 配置: Debug x64 ------
269>Building Custom Rule D:/software/pcl/vtk-v8.1.1/vtk-v8.1.1/CMakeLists.txt
269>CMake does not need to re-run because D:/ProgramFiles/VTK/VTK811/build/CMakeFiles/generate.stamp is up-to-date.
========== 全部重新生成: 成功 268 个,失败 1 个,跳过 0 个 ==========

失败的是: 我没管,继续编译install了

0>CMake Error at D:/ProgramFiles/Cmake/share/cmake-3.14/Modules/ExternalData.cmake:1121 (message):
30>
30>
30>  Object MD5=6424e2a51d932a5c93c361c14c3c4c49 not found at:
30>
30>    http://midas3.kitware.com/midas/api/rest?method=midas.bitstream.download&checksum=6424e2a51d932a5c93c361c14c3c4c49&algorithm=MD5 ("HTTP response code said error")
30>    http://www.vtk.org/files/ExternalData/MD5/6424e2a51d932a5c93c361c14c3c4c49 ("Timeout was reached")
30>
30>
30>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(209,5): error MSB6006: “cmd.exe”已退出,代码为 1。
(2).编译 INSTALL工程

点击INSTALL 工程,鼠标右击,依次选择  “仅用于项目  ->   仅生成INSTALL”

编译成功后,在VTK的安装路径下D:\ProgramFiles\VTK\VTK811\install

能看到如下信息,dll与 lib 均带_d

(3) 将上述文件夹放在新建的debug下,然后重新弄release模式下的

3.release下

选择 release--x64

(1)ALL-BUILD工程  

点击ALL-BUILD 右键  选择 生成     

编译了大概半小时,  生成: 成功 268 个,失败 1 个,最新 0 个,跳过 0 个 ==========

还是失败还是 cmake

(2). INSTALL工程

点击INSTALL 工程,鼠标右击,依次选择  “仅用于项目  ->   仅生成INSTALL”

编译成功后,在VTK的安装路径下D:\ProgramFiles\VTK\VTK811\install

能看到如下信息,dll与 lib 均不带_d

(3) 将生成的release下所有文件拷贝到新建文件夹下

(4)dll拷贝到QT的designer路径下

将 release版  QVTKWidgetPlugin.dll(必须是release版的),添加到你的QT的designer的路径下,D:\QT\5.12.6\msvc2017_64\plugins\designer

就可以在msvc2017_64版本的Qt Designer中添加QVTKWidget控件了

(三)测试vtk

测试vtk是否编译成功,VTK工程中,选择 cube工程,右键,设为 启动项目

然后点击运行,会出现如下图所示

同理,也可以测试: Cone6工程,测试是圆锥

 五、环境变量设置

(一)PCL系统环境变量配置

系统环境变量path中新添加以下几个变量值

//用下面的
D:\ProgramFiles\PCL\PCL1.9.1\bin
D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Boost\lib
D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\FLANN\bin
D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Qhull\bin
D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\OpenNI2\Lib
D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\OpenNI2\Redist
D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\OpenNI2\Tools



注意:

注意:pcl中的vtk不用改动,因为pcl1.9.1中的vtk为8.1.1,与Qt中配置的vtk版本一致

(二)vtk环境变量设置

将vtk配置到系统的环境变量中

D:\ProgramFiles\VTK\VTK811\install\debug\bin
D:\ProgramFiles\VTK\VTK811\install\release\bin

六: qt createtor设计器中 是没有QVTKWidget

打开了我的qt creator 发面 ui界面是没有QVTKWidget的,但是单独打开 designer 发现里面是有的

参考:Windows10下QT+VTK+PCL环境配置(一次成功)_qt pcl_v俊逸的博客-CSDN博客

没有问题 Qt creator不会显示QVTK,但是Qt Designer中有,使用过程中不会影响。这是个历史遗留问题 Qt一直没解决。

打开单独的qt designer,在左下角就会出现啦 

七、Qt-PCL测试

由于测试vtk时出现了问题,就先测试下pcl看安装是否成功

(一)查看文件夹下所有_d.lib文件

获取某一文件夹下文件名的批处理步骤:

获取某一文件夹下文件名的批处理步骤:
新建一个1.txt,输入如下命令:
dir /a-d /b *>scr.txt
再将1.txt后缀名改为.bat即1.bat,运行就会生成一个scr.txt,
里面存放的是文件名,复制所有.lib文件名(即去掉1.bat和scr.txt)到附加依赖项即可完成配置。

(二)qt中pro文件配置

CONFIG += debug_and_release

INCLUDEPATH += D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Boost\include\boost-1_68
INCLUDEPATH += D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Boost\include\boost-1_68\boost
INCLUDEPATH += D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Eigen\eigen3
INCLUDEPATH += D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\FLANN\include
INCLUDEPATH += D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\FLANN\include\flann
INCLUDEPATH += D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Qhull\include
INCLUDEPATH += D:\ProgramFiles\PCL\PCL1.9.1\3rdParty\OpenNI2\Include
INCLUDEPATH += D:\ProgramFiles\PCL\PCL1.9.1\include\pcl-1.9

message("peizhi")

CONFIG(debug,debug|release){

message("debug pro")
INCLUDEPATH += D:\ProgramFiles\VTK\VTK811\install\debug\include\vtk-8.1
LIBS += -LD:\ProgramFiles\PCL\PCL1.9.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 += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Boost\lib\
        -llibboost_atomic-vc141-mt-gd-x64-1_68\
        -llibboost_bzip2-vc141-mt-gd-x64-1_68\
        -llibboost_chrono-vc141-mt-gd-x64-1_68\
        -llibboost_container-vc141-mt-gd-x64-1_68\
        -llibboost_context-vc141-mt-gd-x64-1_68\
        -llibboost_coroutine-vc141-mt-gd-x64-1_68\
        -llibboost_date_time-vc141-mt-gd-x64-1_68\
        -llibboost_exception-vc141-mt-gd-x64-1_68\
        -llibboost_fiber-vc141-mt-gd-x64-1_68\
        -llibboost_filesystem-vc141-mt-gd-x64-1_68\
        -llibboost_graph-vc141-mt-gd-x64-1_68\
        -llibboost_graph_parallel-vc141-mt-gd-x64-1_68\
        -llibboost_iostreams-vc141-mt-gd-x64-1_68\
        -llibboost_locale-vc141-mt-gd-x64-1_68\
        -llibboost_log-vc141-mt-gd-x64-1_68\
        -llibboost_log_setup-vc141-mt-gd-x64-1_68\
        -llibboost_math_c99-vc141-mt-gd-x64-1_68\
        -llibboost_math_c99f-vc141-mt-gd-x64-1_68\
        -llibboost_math_c99l-vc141-mt-gd-x64-1_68\
        -llibboost_math_tr1-vc141-mt-gd-x64-1_68\
        -llibboost_math_tr1f-vc141-mt-gd-x64-1_68\
        -llibboost_math_tr1l-vc141-mt-gd-x64-1_68\
        -llibboost_mpi-vc141-mt-gd-x64-1_68\
        -llibboost_numpy27-vc141-mt-gd-x64-1_68\
        -llibboost_numpy37-vc141-mt-gd-x64-1_68\
        -llibboost_prg_exec_monitor-vc141-mt-gd-x64-1_68\
        -llibboost_program_options-vc141-mt-gd-x64-1_68\
        -llibboost_python27-vc141-mt-gd-x64-1_68\
        -llibboost_python37-vc141-mt-gd-x64-1_68\
        -llibboost_random-vc141-mt-gd-x64-1_68\
        -llibboost_regex-vc141-mt-gd-x64-1_68\
        -llibboost_serialization-vc141-mt-gd-x64-1_68\
        -llibboost_signals-vc141-mt-gd-x64-1_68\
        -llibboost_system-vc141-mt-gd-x64-1_68\
        -llibboost_test_exec_monitor-vc141-mt-gd-x64-1_68\
        -llibboost_thread-vc141-mt-gd-x64-1_68\
        -llibboost_timer-vc141-mt-gd-x64-1_68\
        -llibboost_type_erasure-vc141-mt-gd-x64-1_68\
        -llibboost_unit_test_framework-vc141-mt-gd-x64-1_68\
        -llibboost_wave-vc141-mt-gd-x64-1_68\
        -llibboost_wserialization-vc141-mt-gd-x64-1_68\
        -llibboost_zlib-vc141-mt-gd-x64-1_68

LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\FLANN\lib\
        -lflann-gd\
        -lflann_cpp-gd\
        -lflann_cpp_s-gd\
        -lflann_s-gd

LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\OpenNI2\Lib\ -lOpenNI2

LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Qhull\lib\
        -lqhull_d\
        -lqhullcpp_d\
        -lqhullstatic_d\
        -lqhullstatic_r_d\
        -lqhull_p_d\
        -lqhull_r_d

LIBS += -LD:\ProgramFiles\VTK\VTK811\install\debug\lib\
        -lvtkalglib-8.1_d\
        -lvtkChartsCore-8.1_d\
        -lvtkCommonColor-8.1_d\
        -lvtkCommonComputationalGeometry-8.1_d\
        -lvtkCommonCore-8.1_d\
        -lvtkCommonDataModel-8.1_d\
        -lvtkCommonExecutionModel-8.1_d\
        -lvtkCommonMath-8.1_d\
        -lvtkCommonMisc-8.1_d\
        -lvtkCommonSystem-8.1_d\
        -lvtkCommonTransforms-8.1_d\
        -lvtkDICOMParser-8.1_d\
        -lvtkDomainsChemistry-8.1_d\
        -lvtkexoIIc-8.1_d\
        -lvtkexpat-8.1_d\
        -lvtkFiltersAMR-8.1_d\
        -lvtkFiltersCore-8.1_d\
        -lvtkFiltersExtraction-8.1_d\
        -lvtkFiltersFlowPaths-8.1_d\
        -lvtkFiltersGeneral-8.1_d\
        -lvtkFiltersGeneric-8.1_d\
        -lvtkFiltersGeometry-8.1_d\
        -lvtkFiltersHybrid-8.1_d\
        -lvtkFiltersHyperTree-8.1_d\
        -lvtkFiltersImaging-8.1_d\
        -lvtkFiltersModeling-8.1_d\
        -lvtkFiltersParallel-8.1_d\
        -lvtkFiltersParallelImaging-8.1_d\
        -lvtkFiltersPoints-8.1_d\
        -lvtkFiltersProgrammable-8.1_d\
        -lvtkFiltersSelection-8.1_d\
        -lvtkFiltersSMP-8.1_d\
        -lvtkFiltersSources-8.1_d\
        -lvtkFiltersStatistics-8.1_d\
        -lvtkFiltersTexture-8.1_d\
        -lvtkFiltersTopology-8.1_d\
        -lvtkFiltersVerdict-8.1_d\
        -lvtkfreetype-8.1_d\
        -lvtkGeovisCore-8.1_d\
        -lvtkgl2ps-8.1_d\
        -lvtkglew-8.1_d\
        -lvtkGUISupportQt-8.1_d\
#        -lvtkGUISupportQtOpenGL2-8.1_d\
        -lvtkGUISupportQtSQL-8.1_d\
        -lvtkhdf5-8.1_d\
        -lvtkhdf5_hl-8.1_d\
        -lvtkImagingColor-8.1_d\
        -lvtkImagingCore-8.1_d\
        -lvtkImagingFourier-8.1_d\
        -lvtkImagingGeneral-8.1_d\
        -lvtkImagingHybrid-8.1_d\
        -lvtkImagingMath-8.1_d\
        -lvtkImagingMorphological-8.1_d\
        -lvtkImagingSources-8.1_d\
        -lvtkImagingStatistics-8.1_d\
        -lvtkImagingStencil-8.1_d\
        -lvtkInfovisCore-8.1_d\
        -lvtkInfovisLayout-8.1_d\
        -lvtkInteractionImage-8.1_d\
        -lvtkInteractionStyle-8.1_d\
        -lvtkInteractionWidgets-8.1_d\
        -lvtkIOAMR-8.1_d\
        -lvtkIOCore-8.1_d\
        -lvtkIOEnSight-8.1_d\
        -lvtkIOExodus-8.1_d\
        -lvtkIOExport-8.1_d\
        -lvtkIOExportOpenGL2-8.1_d\
        -lvtkIOGeometry-8.1_d\
        -lvtkIOImage-8.1_d\
        -lvtkIOImport-8.1_d\
        -lvtkIOInfovis-8.1_d\
        -lvtkIOLegacy-8.1_d\
        -lvtkIOLSDyna-8.1_d\
        -lvtkIOMINC-8.1_d\
        -lvtkIOMovie-8.1_d\
        -lvtkIONetCDF-8.1_d\
        -lvtkIOParallel-8.1_d\
        -lvtkIOParallelXML-8.1_d\
        -lvtkIOPLY-8.1_d\
        -lvtkIOSQL-8.1_d\
        -lvtkIOTecplotTable-8.1_d\
        -lvtkIOVideo-8.1_d\
        -lvtkIOXML-8.1_d\
        -lvtkIOXMLParser-8.1_d\
        -lvtkjpeg-8.1_d\
        -lvtkjsoncpp-8.1_d\
        -lvtklibharu-8.1_d\
        -lvtklibxml2-8.1_d\
        -lvtklz4-8.1_d\
        -lvtkmetaio-8.1_d\
        -lvtkNetCDF-8.1_d\
        -lvtknetcdfcpp-8.1_d\
        -lvtkoggtheora-8.1_d\
        -lvtkParallelCore-8.1_d\
        -lvtkpng-8.1_d\
        -lvtkproj4-8.1_d\
        -lvtkRenderingAnnotation-8.1_d\
        -lvtkRenderingContext2D-8.1_d\
        -lvtkRenderingContextOpenGL2-8.1_d\
        -lvtkRenderingCore-8.1_d\
        -lvtkRenderingFreeType-8.1_d\
        -lvtkRenderingGL2PSOpenGL2-8.1_d\
        -lvtkRenderingImage-8.1_d\
        -lvtkRenderingLabel-8.1_d\
        -lvtkRenderingLOD-8.1_d\
        -lvtkRenderingOpenGL2-8.1_d\
        -lvtkRenderingQt-8.1_d\
        -lvtkRenderingVolume-8.1_d\
        -lvtkRenderingVolumeOpenGL2-8.1_d\
        -lvtksqlite-8.1_d\
        -lvtksys-8.1_d\
        -lvtktiff-8.1_d\
        -lvtkverdict-8.1_d\
        -lvtkViewsContext2D-8.1_d\
        -lvtkViewsCore-8.1_d\
        -lvtkViewsInfovis-8.1_d\
        -lvtkViewsQt-8.1_d\
        -lvtkzlib-8.1_d

} else {  #也可以按照下面进行设置,没有此句
#CONFIG(release,debug|release){
message("release CameraUi.pro")
INCLUDEPATH += D:\ProgramFiles\VTK\VTK811\install\release\include\vtk-8.1
LIBS += -LD:\ProgramFiles\PCL\PCL1.9.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 += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Boost\lib\
        -llibboost_atomic-vc141-mt-x64-1_68\
        -llibboost_bzip2-vc141-mt-x64-1_68\
        -llibboost_chrono-vc141-mt-x64-1_68\
        -llibboost_container-vc141-mt-x64-1_68\
        -llibboost_context-vc141-mt-x64-1_68\
        -llibboost_coroutine-vc141-mt-x64-1_68\
        -llibboost_date_time-vc141-mt-x64-1_68\
        -llibboost_exception-vc141-mt-x64-1_68\
        -llibboost_fiber-vc141-mt-x64-1_68\
        -llibboost_filesystem-vc141-mt-x64-1_68\
        -llibboost_graph-vc141-mt-x64-1_68\
        -llibboost_graph_parallel-vc141-mt-x64-1_68\
        -llibboost_iostreams-vc141-mt-x64-1_68\
        -llibboost_locale-vc141-mt-x64-1_68\
        -llibboost_log-vc141-mt-x64-1_68\
        -llibboost_log_setup-vc141-mt-x64-1_68\
        -llibboost_math_c99-vc141-mt-x64-1_68\
        -llibboost_math_c99f-vc141-mt-x64-1_68\
        -llibboost_math_c99l-vc141-mt-x64-1_68\
        -llibboost_math_tr1-vc141-mt-x64-1_68\
        -llibboost_math_tr1f-vc141-mt-x64-1_68\
        -llibboost_math_tr1l-vc141-mt-x64-1_68\
        -llibboost_mpi-vc141-mt-x64-1_68\
        -llibboost_numpy27-vc141-mt-x64-1_68\
        -llibboost_numpy37-vc141-mt-x64-1_68\
        -llibboost_prg_exec_monitor-vc141-mt-x64-1_68\
        -llibboost_program_options-vc141-mt-x64-1_68\
        -llibboost_python27-vc141-mt-x64-1_68\
        -llibboost_python37-vc141-mt-x64-1_68\
        -llibboost_random-vc141-mt-x64-1_68\
        -llibboost_regex-vc141-mt-x64-1_68\
        -llibboost_serialization-vc141-mt-x64-1_68\
        -llibboost_signals-vc141-mt-x64-1_68\
        -llibboost_system-vc141-mt-x64-1_68\
        -llibboost_test_exec_monitor-vc141-mt-x64-1_68\
        -llibboost_thread-vc141-mt-x64-1_68\
        -llibboost_timer-vc141-mt-x64-1_68\
        -llibboost_type_erasure-vc141-mt-x64-1_68\
        -llibboost_unit_test_framework-vc141-mt-x64-1_68\
        -llibboost_wave-vc141-mt-x64-1_68\
        -llibboost_wserialization-vc141-mt-x64-1_68\
        -llibboost_zlib-vc141-mt-x64-1_68

LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\FLANN\lib\
        -lflann\
        -lflann_cpp\
        -lflann_cpp_s\
        -lflann_s

LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\OpenNI2\Lib\ -lOpenNI2

LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Qhull\lib\
        -lqhull\
        -lqhullcpp\
        -lqhullstatic\
        -lqhullstatic_r\
        -lqhull_p\
        -lqhull_r

LIBS += -LD:\ProgramFiles\VTK\VTK811\install\release\lib\
        -lvtkalglib-8.1\
        -lvtkChartsCore-8.1\
        -lvtkCommonColor-8.1\
        -lvtkCommonComputationalGeometry-8.1\
        -lvtkCommonCore-8.1\
        -lvtkCommonDataModel-8.1\
        -lvtkCommonExecutionModel-8.1\
        -lvtkCommonMath-8.1\
        -lvtkCommonMisc-8.1\
        -lvtkCommonSystem-8.1\
        -lvtkCommonTransforms-8.1\
        -lvtkDICOMParser-8.1\
        -lvtkDomainsChemistry-8.1\
        -lvtkexoIIc-8.1\
        -lvtkexpat-8.1\
        -lvtkFiltersAMR-8.1\
        -lvtkFiltersCore-8.1\
        -lvtkFiltersExtraction-8.1\
        -lvtkFiltersFlowPaths-8.1\
        -lvtkFiltersGeneral-8.1\
        -lvtkFiltersGeneric-8.1\
        -lvtkFiltersGeometry-8.1\
        -lvtkFiltersHybrid-8.1\
        -lvtkFiltersHyperTree-8.1\
        -lvtkFiltersImaging-8.1\
        -lvtkFiltersModeling-8.1\
        -lvtkFiltersParallel-8.1\
        -lvtkFiltersParallelImaging-8.1\
        -lvtkFiltersPoints-8.1\
        -lvtkFiltersProgrammable-8.1\
        -lvtkFiltersSelection-8.1\
        -lvtkFiltersSMP-8.1\
        -lvtkFiltersSources-8.1\
        -lvtkFiltersStatistics-8.1\
        -lvtkFiltersTexture-8.1\
        -lvtkFiltersTopology-8.1\
        -lvtkFiltersVerdict-8.1\
        -lvtkfreetype-8.1\
        -lvtkGeovisCore-8.1\
        -lvtkgl2ps-8.1\
        -lvtkglew-8.1\
        -lvtkGUISupportQt-8.1\
        -lvtkGUISupportQtSQL-8.1\
        -lvtkhdf5-8.1\
        -lvtkhdf5_hl-8.1\
        -lvtkImagingColor-8.1\
        -lvtkImagingCore-8.1\
        -lvtkImagingFourier-8.1\
        -lvtkImagingGeneral-8.1\
        -lvtkImagingHybrid-8.1\
        -lvtkImagingMath-8.1\
        -lvtkImagingMorphological-8.1\
        -lvtkImagingSources-8.1\
        -lvtkImagingStatistics-8.1\
        -lvtkImagingStencil-8.1\
        -lvtkInfovisCore-8.1\
        -lvtkInfovisLayout-8.1\
        -lvtkInteractionImage-8.1\
        -lvtkInteractionStyle-8.1\
        -lvtkInteractionWidgets-8.1\
        -lvtkIOAMR-8.1\
        -lvtkIOCore-8.1\
        -lvtkIOEnSight-8.1\
        -lvtkIOExodus-8.1\
        -lvtkIOExport-8.1\
        -lvtkIOExportOpenGL2-8.1\
        -lvtkIOGeometry-8.1\
        -lvtkIOImage-8.1\
        -lvtkIOImport-8.1\
        -lvtkIOInfovis-8.1\
        -lvtkIOLegacy-8.1\
        -lvtkIOLSDyna-8.1\
        -lvtkIOMINC-8.1\
        -lvtkIOMovie-8.1\
        -lvtkIONetCDF-8.1\
        -lvtkIOParallel-8.1\
        -lvtkIOParallelXML-8.1\
        -lvtkIOPLY-8.1\
        -lvtkIOSQL-8.1\
        -lvtkIOTecplotTable-8.1\
        -lvtkIOVideo-8.1\
        -lvtkIOXML-8.1\
        -lvtkIOXMLParser-8.1\
        -lvtkjpeg-8.1\
        -lvtkjsoncpp-8.1\
        -lvtklibharu-8.1\
        -lvtklibxml2-8.1\
        -lvtklz4-8.1\
        -lvtkmetaio-8.1\
        -lvtkNetCDF-8.1\
        -lvtknetcdfcpp-8.1\
        -lvtkoggtheora-8.1\
        -lvtkParallelCore-8.1\
        -lvtkpng-8.1\
        -lvtkproj4-8.1\
        -lvtkRenderingAnnotation-8.1\
        -lvtkRenderingContext2D-8.1\
        -lvtkRenderingContextOpenGL2-8.1\
        -lvtkRenderingCore-8.1\
        -lvtkRenderingFreeType-8.1\
        -lvtkRenderingGL2PSOpenGL2-8.1\
        -lvtkRenderingImage-8.1\
        -lvtkRenderingLabel-8.1\
        -lvtkRenderingLOD-8.1\
        -lvtkRenderingOpenGL2-8.1\
        -lvtkRenderingQt-8.1\
        -lvtkRenderingVolume-8.1\
        -lvtkRenderingVolumeOpenGL2-8.1\
        -lvtksqlite-8.1\
        -lvtksys-8.1\
        -lvtktiff-8.1\
        -lvtkverdict-8.1\
        -lvtkViewsContext2D-8.1\
        -lvtkViewsCore-8.1\
        -lvtkViewsInfovis-8.1\
        -lvtkViewsQt-8.1\
        -lvtkzlib-8.1\

}

(三)测试代码

#include "widget.h"
#include "ui_widget.h"

#include <QDebug>

#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>



Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    std::string fileName = "E:/wokspace/PROJECT/3D_visualization_platform/pcl_data/20210507111715441.pcd";
    //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));
        }

        qDebug()<<"shuchu jieshu";

}

Widget::~Widget()
{
    delete ui;
}

debug程序启动的时候比较慢,要耐心等待一下,最终会弹出点云图

八、Qt-VTK测试

(一)pro配置

配置如七(二)中所示


(二)代码

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>



#include <QFileDialog>


//#include <vtkAutoInit.h>
//VTK_MODULE_INIT(vtkRenderingOpenGL2)
//VTK_MODULE_INIT(vtkInteractionStyle)

#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/io/pcd_io.h>
#include <QVTKWidget.h>
#include <vtkRenderWindow.h>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void initialOPVtkWidget();

        QVTKWidget *mVTKWidget;
            boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
        public slots:
            void showpoint();




private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;

};
#endif // WIDGET_H

cpp

#include "widget.h"
#include "ui_widget.h"

#include <QDebug>


#include <vtkAutoInit.h>
#include <pcl/filters/radius_outlier_removal.h>
#include <pcl/filters/conditional_removal.h>
#include <pcl/io/pcd_io.h>
#include <QTimer>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTimer>
#include <vtkOutputWindow.h>  //消除vtk警告窗口的

VTK_MODULE_INIT(vtkRenderingOpenGL2); //必须位opengl2
VTK_MODULE_INIT(vtkInteractionStyle);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    initialOPVtkWidget();



        mVTKWidget = new QVTKWidget(this);
        QVBoxLayout *layout = new QVBoxLayout(this);
        layout->addWidget(mVTKWidget);

        QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Preferred);
        sizePolicy1.setHorizontalStretch(0);
        sizePolicy1.setVerticalStretch(0);
        sizePolicy1.setHeightForWidth(mVTKWidget->sizePolicy().hasHeightForWidth());
        mVTKWidget->setSizePolicy(sizePolicy1);//设置vtk视图大小
        mVTKWidget->setMinimumSize(QSize(1200, 800));
        mVTKWidget->showFullScreen();

        viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));//初始化viewer
        mVTKWidget->SetRenderWindow(viewer->getRenderWindow());//关联鼠标事件
        viewer->setupInteractor(mVTKWidget->GetInteractor(), mVTKWidget->GetRenderWindow());//设置显示部件
        viewer->addPointCloud(cloud, "cloud");
        viewer->addCoordinateSystem(383);
        viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1.3, "cloud");
        pcl::PointXYZ p;
        for (int i = 0; i < 100; i++) {
            p.x = rand() % 100;
            p.y = rand() % 100;
            p.z = rand() % 100;
            cloud->push_back(p);
        }
        viewer->updatePointCloud<pcl::PointXYZ>(cloud, "cloud");
        mVTKWidget->update();

        QTimer *time = new QTimer(this);
        connect(time, SIGNAL(timeout()), this, SLOT(showpoint()));
        time->start(50);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::initialOPVtkWidget()
{
    cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
    viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
    viewer->addPointCloud(cloud, "cloud");
    //消除vtk警告输出窗口
    vtkOutputWindow::SetGlobalWarningDisplay(0);//对应头文件#include <vtkOutputWindow.h>
   

}


void Widget::on_pushButton_clicked()
{
    onOpen();
}

//原文链接:https://blog.csdn.net/qq_34512507/article/details/100991932
void Widget::showpoint()
{
    cloud->clear();
    pcl::PointXYZ p;
    for (int i = 0; i < 100; i++) {
        p.x = rand() % 100;
        p.y = rand() % 100;
        p.z = rand() % 100;
        cloud->push_back(p);
    }
    viewer->updatePointCloud<pcl::PointXYZ>(cloud, "cloud");
    mVTKWidget->update();
}

参考:

10分钟配好vs2017+pcl1.9.1+vtk8.1+qt5.9+点云环境配置_点睡的博客-CSDN博客icon-default.png?t=N6B9https://blog.csdn.net/qq_34512507/article/details/100991932

(三)消除vtk警告窗口

运行程序时,除了弹出主窗口,还会弹出一个关于VTK的警告窗口,添加如下代码可关闭窗口

#include <vtkOutputWindow.h>


//消除vtk警告输出窗口
vtkOutputWindow::SetGlobalWarningDisplay(0);//必须得添加头文件才行

(四)出现的问题

1.widget.obj:-1: error: LNK2001: 无法解析的外部符号 "void __cdecl vtkRenderingOpenGL_AutoInit_Construct(void)" (?vtkRenderingOpenGL_AutoInit_Construct@@YAXXZ)

vtkRenderingOpenGL 这个再代码中一查,发现头文件中添加了VTK_MODULE_INIT(vtkRenderingOpenGL)

但我的库中是vtkRenderingOpenGL2,

后面改为:VTK_MODULE_INIT(vtkRenderingOpenGL2)

2. 概要信息中提示的错误:

2023-08-03T16:24:32 Clang Code Model: Error: The clangbackend process has finished unexpectedly and was restarted.

参考:

Qt通过QVTKWidget显示VTK交互窗口_FRED618的博客-CSDN博客https://blog.csdn.net/qq_37441588/article/details/118677431

猜你喜欢

转载自blog.csdn.net/u012719076/article/details/132061087