当前位置: 首页 > news >正文

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_releaseINCLUDEPATH += 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.9message("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_debugLIBS += -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_68LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\FLANN\lib\-lflann-gd\-lflann_cpp-gd\-lflann_cpp_s-gd\-lflann_s-gdLIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\OpenNI2\Lib\ -lOpenNI2LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Qhull\lib\-lqhull_d\-lqhullcpp_d\-lqhullstatic_d\-lqhullstatic_r_d\-lqhull_p_d\-lqhull_r_dLIBS += -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_releaseLIBS += -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_68LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\FLANN\lib\-lflann\-lflann_cpp\-lflann_cpp_s\-lflann_sLIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\OpenNI2\Lib\ -lOpenNI2LIBS += -LD:\ProgramFiles\PCL\PCL1.9.1\3rdParty\Qhull\lib\-lqhull\-lqhullcpp\-lqhullstatic\-lqhullstatic_r\-lqhull_p\-lqhull_rLIBS += -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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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));//初始化viewermVTKWidget->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

相关文章:

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

由于我电脑中有 QT5.12.6 VS2017&#xff0c;就不介绍怎么安装了&#xff0c;只介绍cmake&#xff0c;pcl及vtk的配置步骤 为了便于后续QT的调用&#xff0c;以下所有安装路径中均不能出现中文及空格等 PCL自带VTK是不完整的&#xff0c;所以需要下载VTK源码进行重新编译使其…...

【项目 计网1】4.1 网络结构模式 4.2MAC地址、IP地址、端口

文章目录 第四章 Linux网络编程4.1 网络结构模式C/S结构&#xff08;client-server&#xff09;B/S结构&#xff08;Browser/Server&#xff0c;浏览器/服务器模式&#xff09; 4.2 4.3MAC地址、IP地址、端口&#xff08;1&#xff09;&#xff08;2&#xff09;MAC地址IP地址(…...

uni-app:分页实现多选功能

效果 代码解析 一、标签-列表 <view class"item_all" v-for"(item, index) in info" :key"index"><view class"position parameter-info text-over" :class"{checked_parameter: item.checked}" :data-id"i…...

问道管理:沪指窄幅震荡跌0.18%,有色、汽车等板块走低

3日早盘&#xff0c;沪指盘中窄幅震动下探&#xff0c;创业板逆市上扬&#xff1b;两市半日成交不足5000亿元&#xff0c;北向资金净卖出超15亿元。 到午间收盘&#xff0c;沪指跌0.18%报3255.88点&#xff0c;深成指跌0.23%&#xff0c;创业板指涨0.2%&#xff1b;两市算计成交…...

Kotlin 协程与 Flow

简介 Kotlin的Flow 是 Kotlin 在异步编程方面的一个重要组件&#xff0c;它提供了一种声明式的、可组合的、基于协程的异步编程模型。Flow 的设计灵感来自于 Reactive Streams、RxJava、Flux 和其他异步编程库&#xff0c;但它与 Kotlin 协程无缝集成&#xff0c;并提供了一种更…...

设备管理系统与物联网的融合:实现智能化设备监控和维护

在数字化时代&#xff0c;设备管理系统和物联网技术的融合为工业企业带来了巨大的变革和创新。本文将探讨设备管理系统与物联网的融合&#xff0c;重点介绍设备健康管理平台在实现智能化设备监控和维护方面的关键作用和优势。 一、设备管理系统与物联网的融合 随着物联网技术的…...

三、从官方源码精简出第1个FreeRTOS

1、官方源码下载 (1)进入FreeRTOS官网&#xff1a;FreeRTOS官网 (2)点击下载FreeRTOS。 (3)选择待示例的项目进行下载。 2、删减目录 (1)下载后解压的FreeRTOS文件如下图所示。 (2)删除下图中红框勾选的文件。 (3)删除"FreeRTOSv202212.01\FreeRTOS\Demo"目录下用…...

__call__函数的用法

__call__的用法 在 Python 中&#xff0c;类可以通过定义特殊方法 call 来使其实例对象可调用&#xff0c;就像调用普通的函数一样。当你在实例对象后面加上括号并传递参数时&#xff0c;Python 会自动调用这个对象的 call 方法。这使得你可以将类的实例对象当作函数来使用。 下…...

golang定时任务库cron实践

简介 cron一个用于管理定时任务的库&#xff0c;用 Go 实现 Linux 中crontab这个命令的效果。之前我们也介绍过一个类似的 Go 库——gron。gron代码小巧&#xff0c;用于学习是比较好的。但是它功能相对简单些&#xff0c;并且已经不维护了。如果有定时任务需求&#xff0c;还…...

Julia 流程控制

流程控制语句通过程序设定一个或多个条件语句来实现。在条件为 true 时执行指定程序代码&#xff0c;在条件为 false 时执行其他指定代码。 Julia 提供了大量的流程控制语句&#xff1a; 复合表达式&#xff1a;begin 和 ;。 条件表达式&#xff1a;if-elseif-else 和 ?: (三…...

问题解决方案

前端开发 1、npm安装的时候老是卡住 reify:rxjs: timing reifyNode:node_modules/vue/cli/node_modules 查看当前使用的那个镜像 nrm lsnpm ---------- https://registry.npmjs.org/yarn --------- https://registry.yarnpkg.com/cnpm --------- https://r.cnpmjs.org/taobao …...

kubernetes基于helm部署gitlab-operator

kubernetes基于helm部署gitlab-operator 这篇博文介绍如何在 Kubernetes 中使用helm部署 GitLab-operator。 先决条件 已运行的 Kubernetes 集群负载均衡器&#xff0c;为ingress-nginx控制器提供EXTERNAL-IP&#xff0c;本示例使用metallb默认存储类&#xff0c;为gitlab p…...

ChatGPT在在线客服和呼叫中心中的应用如何?

ChatGPT在在线客服和呼叫中心领域中有广泛的应用潜力&#xff0c;可以帮助企业提供更高效、个性化和满意度更高的客户服务体验。以下是详细的讨论&#xff1a; **1. 自动化客服&#xff1a;** ChatGPT可以用于自动化客服流程&#xff0c;通过自动回复用户的常见问题和查询&…...

C++多线程环境下的单例类对象创建

使用C无锁编程实现多线程下的单例模式 贺志国 2023.8.1 在多线程环境下创建一个类的单例对象&#xff0c;要比单线程环境下要复杂很多。下面介绍在多线程环境下实现单例模式的几种方法。 一、尺寸较小的类单例对象创建 如果待创建的单例类SingletonForMultithread内包含的成…...

“深入解析JVM内部机制:从字节码到垃圾回收“

标题&#xff1a;深入解析JVM内部机制&#xff1a;从字节码到垃圾回收 摘要&#xff1a;本文将从字节码生成、类加载、运行时数据区域和垃圾回收等方面深入解析JVM的内部机制&#xff0c;并通过示例代码展示其工作原理和实践应用。 正文&#xff1a; 一、字节码生成 JVM是基…...

音频系统项目与音频算法研究方向分类

+我V hezkz17进数字音频系统研究开发交流答疑群(课题组) 音频系统项目与音频算法研究方向分类 一 音频系统项目产品分类 1 收音机,数字收音机,复读机 2 耳机,蓝牙耳机,TWS蓝牙耳机, 3 立体声音箱,AI智能音箱, 4 音频功放,车载功放, 5 音响,普通音响,Soundbar音响…...

单例模式和工厂模式

目录 今日良言&#xff1a;关关难过关关过&#xff0c;步步难行步步行 一、单例模式 1.饿汉模式 2.懒汉模式 二、工厂模式 今日良言&#xff1a;关关难过关关过&#xff0c;步步难行步步行 一、单例模式 首先来解释一下&#xff0c;什么是单例模式。 单例模式也就是单个…...

两个镜头、视野、分辨率不同的相机(rgb、红外)的视野校正

文章目录 背景实际效果查找资料资料1资料2 解决方案最终结果 背景 目前在做的项目用到两个摄像头&#xff0c;一个是热成像摄像头、另一个是普通的rgb摄像头。 一开始的目标是让他们像素级重合&#xff0c;使得点击rgb图像时&#xff0c;即可知道其像素对应的温度。但是在尝试…...

kettle 连接jdbc

DM JDBC连接 oracle JDBC连接 PG JDBC连接 SQLSERVER JDBC连接...

PyTorch中加载模型权重 A匹配B|A不匹配B

在做深度学习项目时&#xff0c;从头训练一个模型是需要大量时间和算力的&#xff0c;我们通常采用加载预训练权重的方法&#xff0c;而我们往往面临以下几种情况&#xff1a; 未修改网络&#xff0c;A与B一致 很简单&#xff0c;直接.load_state_dict() net ANet(num_cla…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...