VS2019+CMAKE3.29.2+QT6.5.3+PCL1.12.1+OPENCV4.6.0+VTK9.1.0详细配置流程

一、简述

本流程可以实现vs2019下qt插件的使用,默认安装的pcl库下的vtk库文件并不全,不支持qt下窗体开发,且qt6以后去掉了在qt下的窗体组件,需要使用提升方法,因此嵌入vtk-qt插件,使得可以在vs环境下开发带vtk界面的qt ui程序。近期发现qt5.12版本在官网已经无法下载(报ip错误),镜像源也没有此版本留存,这里索性使用新版本qt6,若想要老版本5离线安装包可以参考其他教程

流程为 配置qt-->安装vs下qt插件-->安装cmake-->cmake源码编译配置vtk-->vs下配置各库(配置vs下qt插件需要先配置好qt环境)

流程中会使用到cmake工具,同时,默认pcl与opencv已经安装好,欢迎参考之前的流程

VS2019+PCL1.12.1+OpenCV4.6.0详细配置流程-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_46402470/article/details/142618114?spm=1001.2014.3001.5501 vs项目配置属性表及项目移植在未配环境的设备上开发(一劳永逸 以opencv pcl路径配置为例)-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_46402470/article/details/142620212?spm=1001.2014.3001.5501

注意:不同版本配置可能稍有差距,这里只演示上述版本,且为release平台(debug仅做说明不做演示)

最初参考的配置教程:

VTK源码编译安装记录与教程(VS2019+QT5.15.2+PCL1.12.1+VTK9.1.0配置,超详细)_vtk配置-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/yl19870518/article/details/130970389

二、附件

包含本流程所需要的所有工具

阿里云盘链接:

https://www.alipan.com/s/kk1vJtEEJEh

百度网盘链接:

http://链接:https://pan.baidu.com/s/1O6P6c0alWZBX_mXsrUoFrw?pwd=v57u 提取码:v57u

三、Qt环境配置

注意:默认vs已经安装好

1.到qt官网 https://download.qt.io/archive/qt/或清华镜像站 https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/或附件(附件包含流程所有所需安装文件)下载对应版本qt在线安装包(建议使用清华镜像站)

2.在下载好的可执行文件目录下,输入powershell,打开终端,并运行:

.\qt-unified-windows-x64-4.6.1-online.exe --mirror  https://mirrors.tuna.tsinghua.edu.cn/qt

注意:不同的qt安装工具可能以下安装逻辑界面不完全相同,但流程基本一致

3.qt首次使用需要注册,往次使用可以登录,请遵守开源协议,选择开源版本,输入账户密码登录,并勾选对应qt条款,下一步

4.可以选择不发送使用数据,下一步

5.选择安装目录,选择custom installation,下一步

6.建议不要选择最新qt版本,6.5.3即可,并选择MSVC2019(对应vs2019,若为2022,选择对应编译器 且根据电脑架构选择),其他组件的选择建议默认或去掉一些项目使用不到的组件以减小占用,qt程序有两种开发方式:vs+qt或直接使用qt creator,若不需要qtcreator开发也可不勾选组件,更详细的说明可以参考这位博主教程:

Qt6入门教程 2:Qt6下载与安装-CSDN博客文章浏览阅读1.3w次,点赞63次,收藏155次。Qt6入门教程 2:Qt6下载与安装_qt6下载https://blog.csdn.net/caoshangpa/article/details/135420524?sharetype=blog&shareId=135420524&sharerefer=APP&sharesource=weixin_46402470&sharefrom=link

7.后面一路默认,到安装界面,选择安装

8.若安装时出现此报错,请参考此博主教程:若未出现,跳过

https://blog.csdn.net/qq_57541265/article/details/131769444?sharetype=blog&shareId=131769444&sharerefer=APP&sharesource=weixin_46402470&sharefrom=link

或换源解决:.\qt-unified-windows-x64-4.6.1-online.exe --mirror  https://mirrors.tuna.nju.edu.cn/qt

9.等待安装完成,这里不演示qt creator的新建项目流程(与vs大同小异 可参考后面vs下qt配置)

10.配置环境变量,右键此电脑-->属性-->高级系统设置-->环境变量-->path,添加bin目录路径(你自己的安装目录,第一级为6.5.3最后一级应为bin)

一直点确定直到关闭

四、Vs+Qt插件配置

1.到qtvs插件官网 https://download.qt.io/official_releases/vsaddin/或附件下载对应版本插件安装包(建议使用最新版本的上一版本)

2.或直接使用vs下载qt插件(不建议)

3.这里演示使用插件方式,运行插件安装,检查版本对应,点击安装install,建议安装前先关闭vs

选择endtask继续(未出现则跳过),等待安装完成

4.打开vs,创建新项目或打开已有项目,建议先新建一个项目配置一次,点击扩展(X)-->qt vs tools-->qt version,添加版本

5.浏览路径,选择安装位置,要找到自己的安装路径qmake.exe所在的目录下面

添加完成,点击确定,关闭vs

五、Vs+Qt例程

1.至此,qt环境、qt开发IDE qtcreator或vs的qt插件已经全部配置完成,后续可以直接使用,下面演示使用方法及测试,打开vs,创建qt widgets application项目,若没有此项,请排查上述步骤的配置(尤其是环境变量以及插件的配置)

2.弹出qt配置窗口,下一步next

根据简介这里只演示release,取消勾选debug,注意:可见默认的qt modules只有 core gui widgets,可以下拉栏根据项目选择其他模块,若此处未选择,后续想要使用(例如串口模块和网络通信模块),欢迎参考之前的流程:

VS2019+QT5配置串口库(vs下qt串口通信)-CSDN博客

VS2019+QT5配置socket(tcp/ip socket网络通信)-CSDN博客

3.绿框根据需要修改,注意名称的一致性,qmainwindow是带上边菜单栏的窗口,qwidget是无菜单栏窗口,dialog对话框,具体更准确详细的信息请参考qt官网或其他博客,这里根据需要选择,演示选择qmainwindow,点击finish

可见已经创建成功,ui是界面文件,h是头文件,cpp是源文件,qrc是资源文件,需要修改界面,双击ui文件

4.双击ui文件,修改界面,若界面闪退或出现此报错,按以下方法解决:

扩展-->qt vs tools-->options-->qt-->general-->qt designer,run in detached window改为true

5.再次双击ui文件,修改界面,问题解决,随便放入几个控件,注意:修改完一定要ctrl s保存,否则可能不会更新,运行vs,完成

六、Cmake配置(用于编译vtk源码)

注意:pcl自带vtk库,但是并不全,因此使用现成的pcl版本内的vtk库,无法将其放入vs+qt下使用,而vtk不提供编译好的版本,(也可以去其他博客寻找)因此选用vtk源码编译的方式来生成库文件,以供vs+qt嵌入使用

1.到cmake官网 https://cmake.org/files/或附件下载对应版本cmake安装包(建议使用最新版本的上一版本)运行

解压到安装目录,得到以下文件:

2.配置环境变量,右键此电脑-->属性-->高级系统设置-->环境变量-->path,添加bin目录路径,一直点击确定到关闭

3.验证,win+r输入cmd回车,输入cmake --version,出现版本号完成,若输出不是批处理命令提示,请检查环境变量的目录是否正确

七、VTK源码编译

1.到vtk git官网https://gitlab.kitware.com/vtk/vtk/-/tags 或附件下载对应版本vtk源码,需要使用9.1.0

解压至自己的安装目录

2.在安装根目录下新建两个文件夹(或其他自定义文件夹路径,名称随意,用于后续存放解决方案及输出库文件)

3.打开cmake(开始和桌面都找不到应用,去自己的安装目录的bin目录下将exe文件发送至桌面快捷方式),分别配置路径,注意,source文件夹要为CMakeList.txt所在的文件夹,BUILD为刚才新建的文件夹,配置完成后点击configure

选择对应的vs19版本,一定要注意版本对应,否则可能会导致意外错误,排查极为麻烦

这里还要注意第二项optional platform for generator,空着默认x64平台,根据需求选择对应

4.编译过程较慢,等待一会,下面开始配置

5.配置CMAKE:Ungrouped Entries-->BULID_SHARED_LIBS 勾选

CMAKE-->CMAKE_INSTALL_PREFIX改为刚才新建的GENERATE文件夹(你自己的)

CMAKE-->CMAKE_CONFIGURATION_TYPES默认

Search-->qt-->* 都选择WANT,点击configure

完成之后确认Ungrouped Entries下面的qt目录,若不对修改,若对跳过,关键步骤!!!(尤其是有两个版本的)

VTK_QT_VERSION选择对应版本qt6,再次configure,关键步骤!!!

全部无爆红后,点击generate生成解决方案,生成出的内容目录为BUILD(你自己的)

6.等待生成完成,到BUILD目录(你自己的)下找到解决方案(VS程序),双击打开(或使用cmake直接打开)

配置release平台(如需要debug请等待release全部生成成功后再重新选择配置debug)右键ALL_BULID,生成,过程时间较长,趁此空隙可以检查pcl和opencv是否安装成功(尤其是环境变量)

完成后 右键INSTALL-->生成

可见输出目录(CMAKE里配置的CMAKE_INSTALL_PREFIX)多了四个文件夹,完成(需要debug的可以返回上上步配置debug平台编译生成了)

八、PCL下VTK库替换

1.将刚才生成的bin文件夹下的所有dll文件复制到pcl路径下,前文所述pcl自带的vtk不全(尤其是缺少vtkqt库),因此将源码编译生成的库放在pcl库自带的vtk下面即可(若也生成了debug 同此操作),release不带尾缀d,debug带d

2.全选上述dll文件,复制,粘贴在pcl目录下的vtk目录下(按简述默认配置了pcl 若未配置,参考一、简述),替换,完成

3.同理,将include与lib文件夹下的所有内容依次复制替换到pcl-->3rdparty-->vtk对应的include与lib里,关键步骤!!!一定要全部替换完成(替换即可 之前pcl自带的不要删除)

九、VS下测试

1.新建或打开一个现有qt widgets项目,(参考前面四),新建或引入一个项目属性表(包含pcl与cv 欢迎参考教程 vs项目配置属性表及项目移植在未配环境的设备上开发(一劳永逸 以opencv pcl路径配置为例)-CSDN博客,配置pcl和cv,这里不做配置的赘述,只给出信息:

VC++目录-->包含目录

YOUR PATH\PCL 1.12.1\3rdParty\OpenNI2\Include C:\Program Files\PCL 1.11.1\3rdParty\VTK\include\vtk-9.1

YOUR PATH\PCL 1.12.1\3rdParty\Qhull\include

YOUR PATH\PCL 1.12.1\3rdParty\FLANN\include

YOUR PATH\PCL 1.12.1\3rdParty\Eigen\eigen3

YOUR PATH\PCL 1.12.1\3rdParty\Boost\include\boost-1_78

YOUR PATH\PCL 1.12.1\include\pcl-1.12

YOUR PATH\opencv\build\include

YOUR PATH\opencv\build\include\opencv2

VC++目录-->库目录

YOUR PATH\PCL 1.12.1\3rdParty\OpenNI2\Lib

YOUR PATH\PCL 1.12.1\3rdParty\VTK\lib

YOUR PATH\PCL 1.12.1\3rdParty\Qhull\lib

YOUR PATH\PCL 1.12.1\3rdParty\FLANN\lib

YOUR PATH\PCL 1.12.1\3rdParty\Boost\lib

YOUR PATH\PCL 1.12.1\lib

YOUR PATH\opencv\build\x64\vc15\lib

C/C++-->预处理器

_CRT_SECURE_NO_DEPRECATE

链接器-->输入(这里只给出Release版本,需要debug版本的可以参考之前提到的博客(博主提供了一个提取dll文件脚本,可以自动提取很方便):VS2019+QT5.15.2+PCL1.12.1+VTK9.1.0配置,超详细)_vtk配置-CSDN博客
libboost_atomic-vc142-mt-x64-1_78.lib
libboost_bzip2-vc142-mt-x64-1_78.lib
libboost_chrono-vc142-mt-x64-1_78.lib
libboost_container-vc142-mt-x64-1_78.lib
libboost_context-vc142-mt-x64-1_78.lib
libboost_contract-vc142-mt-x64-1_78.lib
libboost_coroutine-vc142-mt-x64-1_78.lib
libboost_date_time-vc142-mt-x64-1_78.lib
libboost_exception-vc142-mt-x64-1_78.lib
libboost_filesystem-vc142-mt-x64-1_78.lib
libboost_graph-vc142-mt-x64-1_78.lib
libboost_graph_parallel-vc142-mt-x64-1_78.lib
libboost_iostreams-vc142-mt-x64-1_78.lib
libboost_json-vc142-mt-x64-1_78.lib
libboost_locale-vc142-mt-x64-1_78.lib
libboost_log-vc142-mt-x64-1_78.lib
libboost_log_setup-vc142-mt-x64-1_78.lib
libboost_math_c99-vc142-mt-x64-1_78.lib
libboost_math_c99f-vc142-mt-x64-1_78.lib
libboost_math_c99l-vc142-mt-x64-1_78.lib
libboost_math_tr1-vc142-mt-x64-1_78.lib
libboost_math_tr1f-vc142-mt-x64-1_78.lib
libboost_math_tr1l-vc142-mt-x64-1_78.lib
libboost_mpi-vc142-mt-x64-1_78.lib
libboost_nowide-vc142-mt-x64-1_78.lib
libboost_numpy38-vc142-mt-x64-1_78.lib
libboost_prg_exec_monitor-vc142-mt-x64-1_78.lib
libboost_program_options-vc142-mt-x64-1_78.lib
libboost_python38-vc142-mt-x64-1_78.lib
libboost_random-vc142-mt-x64-1_78.lib
libboost_regex-vc142-mt-x64-1_78.lib
libboost_serialization-vc142-mt-x64-1_78.lib
libboost_system-vc142-mt-x64-1_78.lib
libboost_test_exec_monitor-vc142-mt-x64-1_78.lib
libboost_thread-vc142-mt-x64-1_78.lib
libboost_timer-vc142-mt-x64-1_78.lib
libboost_type_erasure-vc142-mt-x64-1_78.lib
libboost_unit_test_framework-vc142-mt-x64-1_78.lib
libboost_wave-vc142-mt-x64-1_78.lib
libboost_wserialization-vc142-mt-x64-1_78.lib
libboost_zlib-vc142-mt-x64-1_78.lib
flann-gd.lib
flann.lib
flann_cpp-gd.lib
flann_cpp.lib
flann_cpp_s-gd.lib
flann_cpp_s.lib
flann_s-gd.lib
flann_s.lib
OpenNI2.lib
pcl_common.lib
pcl_commond.lib
pcl_features.lib
pcl_featuresd.lib
pcl_filters.lib
pcl_filtersd.lib
pcl_io.lib
pcl_iod.lib
pcl_io_ply.lib
pcl_io_plyd.lib
pcl_kdtree.lib
pcl_kdtreed.lib
pcl_keypoints.lib
pcl_keypointsd.lib
pcl_ml.lib
pcl_mld.lib
pcl_octree.lib
pcl_octreed.lib
pcl_outofcore.lib
pcl_outofcored.lib
pcl_people.lib
pcl_peopled.lib
pcl_recognition.lib
pcl_recognitiond.lib
pcl_registration.lib
pcl_registrationd.lib
pcl_sample_consensus.lib
pcl_sample_consensusd.lib
pcl_search.lib
pcl_searchd.lib
pcl_segmentation.lib
pcl_segmentationd.lib
pcl_stereo.lib
pcl_stereod.lib
pcl_surface.lib
pcl_surfaced.lib
pcl_tracking.lib
pcl_trackingd.lib
pcl_visualization.lib
pcl_visualizationd.lib
qhullcpp.lib
qhullcpp_d.lib
qhullstatic.lib
qhullstatic_d.lib
qhullstatic_r.lib
qhullstatic_rd.lib
qhull_r.lib
qhull_rd.lib
vtkcgns-9.1.lib
vtkChartsCore-9.1.lib
vtkCommonColor-9.1.lib
vtkCommonComputationalGeometry-9.1.lib
vtkCommonCore-9.1.lib
vtkCommonDataModel-9.1.lib
vtkCommonExecutionModel-9.1.lib
vtkCommonMath-9.1.lib
vtkCommonMisc-9.1.lib
vtkCommonSystem-9.1.lib
vtkCommonTransforms-9.1.lib
vtkDICOMParser-9.1.lib
vtkDomainsChemistry-9.1.lib
vtkDomainsChemistryOpenGL2-9.1.lib
vtkdoubleconversion-9.1.lib
vtkexodusII-9.1.lib
vtkexpat-9.1.lib
vtkFiltersAMR-9.1.lib
vtkFiltersCore-9.1.lib
vtkFiltersExtraction-9.1.lib
vtkFiltersFlowPaths-9.1.lib
vtkFiltersGeneral-9.1.lib
vtkFiltersGeneric-9.1.lib
vtkFiltersGeometry-9.1.lib
vtkFiltersHybrid-9.1.lib
vtkFiltersHyperTree-9.1.lib
vtkFiltersImaging-9.1.lib
vtkFiltersModeling-9.1.lib
vtkFiltersParallel-9.1.lib
vtkFiltersParallelImaging-9.1.lib
vtkFiltersPoints-9.1.lib
vtkFiltersProgrammable-9.1.lib
vtkFiltersSelection-9.1.lib
vtkFiltersSMP-9.1.lib
vtkFiltersSources-9.1.lib
vtkFiltersStatistics-9.1.lib
vtkFiltersTexture-9.1.lib
vtkFiltersTopology-9.1.lib
vtkFiltersVerdict-9.1.lib
vtkfmt-9.1.lib
vtkfreetype-9.1.lib
vtkGeovisCore-9.1.lib
vtkgl2ps-9.1.lib
vtkglew-9.1.lib
vtkGUISupportQt-9.1.lib
vtkGUISupportQtQuick-9.1.lib
vtkGUISupportQtSQL-9.1.lib
vtkhdf5-9.1.lib
vtkhdf5_hl-9.1.lib
vtkImagingColor-9.1.lib
vtkImagingCore-9.1.lib
vtkImagingFourier-9.1.lib
vtkImagingGeneral-9.1.lib
vtkImagingHybrid-9.1.lib
vtkImagingMath-9.1.lib
vtkImagingMorphological-9.1.lib
vtkImagingSources-9.1.lib
vtkImagingStatistics-9.1.lib
vtkImagingStencil-9.1.lib
vtkInfovisCore-9.1.lib
vtkInfovisLayout-9.1.lib
vtkInteractionImage-9.1.lib
vtkInteractionStyle-9.1.lib
vtkInteractionWidgets-9.1.lib
vtkIOAMR-9.1.lib
vtkIOAsynchronous-9.1.lib
vtkIOCGNSReader-9.1.lib
vtkIOChemistry-9.1.lib
vtkIOCityGML-9.1.lib
vtkIOCONVERGECFD-9.1.lib
vtkIOCore-9.1.lib
vtkIOEnSight-9.1.lib
vtkIOExodus-9.1.lib
vtkIOExport-9.1.lib
vtkIOExportGL2PS-9.1.lib
vtkIOExportPDF-9.1.lib
vtkIOGeometry-9.1.lib
vtkIOHDF-9.1.lib
vtkIOImage-9.1.lib
vtkIOImport-9.1.lib
vtkIOInfovis-9.1.lib
vtkIOIOSS-9.1.lib
vtkIOLegacy-9.1.lib
vtkIOLSDyna-9.1.lib
vtkIOMINC-9.1.lib
vtkIOMotionFX-9.1.lib
vtkIOMovie-9.1.lib
vtkIONetCDF-9.1.lib
vtkIOOggTheora-9.1.lib
vtkIOParallel-9.1.lib
vtkIOParallelXML-9.1.lib
vtkIOPLY-9.1.lib
vtkIOSegY-9.1.lib
vtkIOSQL-9.1.lib
vtkioss-9.1.lib
vtkIOTecplotTable-9.1.lib
vtkIOVeraOut-9.1.lib
vtkIOVideo-9.1.lib
vtkIOXML-9.1.lib
vtkIOXMLParser-9.1.lib
vtkjpeg-9.1.lib
vtkjsoncpp-9.1.lib
vtkkissfft-9.1.lib
vtklibharu-9.1.lib
vtklibproj-9.1.lib
vtklibxml2-9.1.lib
vtkloguru-9.1.lib
vtklz4-9.1.lib
vtklzma-9.1.lib
vtkmetaio-9.1.lib
vtknetcdf-9.1.lib
vtkogg-9.1.lib
vtkParallelCore-9.1.lib
vtkParallelDIY-9.1.lib
vtkpng-9.1.lib
vtkpugixml-9.1.lib
vtkRenderingAnnotation-9.1.lib
vtkRenderingContext2D-9.1.lib
vtkRenderingContextOpenGL2-9.1.lib
vtkRenderingCore-9.1.lib
vtkRenderingFreeType-9.1.lib
vtkRenderingGL2PSOpenGL2-9.1.lib
vtkRenderingImage-9.1.lib
vtkRenderingLabel-9.1.lib
vtkRenderingLOD-9.1.lib
vtkRenderingOpenGL2-9.1.lib
vtkRenderingQt-9.1.lib
vtkRenderingSceneGraph-9.1.lib
vtkRenderingUI-9.1.lib
vtkRenderingVolume-9.1.lib
vtkRenderingVolumeOpenGL2-9.1.lib
vtkRenderingVtkJS-9.1.lib
vtksqlite-9.1.lib
vtksys-9.1.lib
vtkTestingRendering-9.1.lib
vtktheora-9.1.lib
vtktiff-9.1.lib
vtkverdict-9.1.lib
vtkViewsContext2D-9.1.lib
vtkViewsCore-9.1.lib
vtkViewsInfovis-9.1.lib
vtkViewsQt-9.1.lib
vtkWrappingTools-9.1.lib
vtkzlib-9.1.lib
opencv_world460.lib
 

2.双击打开ui文件,放入label,插入opengl widget,右键黑色框体,选择 提升为

基类名称选择QOpenGLWidget,提升的类名称为:QVTKOpenGLNativeWidget,点击添加,并提升

可以看到对象框里的类已经提升成功了,接着ctrl s保存ui文件(一定要保存)

3.在cpp的构造函数里写代码,进行vtk与cv测试

注意:如果运行时出现以下类似错误,应该是在CMAKE时并未配置正确,导致qt版本对应出现问题,请根据之前的CMAKE配置步骤仔细排查,重新编译生成文件,再重新替换(vs内的配置无需更改)

4.写入以下代码:注意修改文件名称与路径,文件可以自己下载(pcd和jpg/png类型)或在附件中找到,且注意要改成自己的窗体类

#include "QtWidgetsApplication1.h"

//VTK库 重要
#include <vtkGenericOpenGLRenderWindow.h>		
#include <QVTKOpenGLNativeWidget.h>	
#include <vtkOrientationMarkerWidget.h>
#include <qmessagebox.h>
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include <vtkNew.h>
#include <vtkAxesActor.h>
#include "vtkConeSource.h"
#include "vtkCamera.h"
#include <vtkProperty.h>
#include <vtkVertexGlyphFilter.h>
#include <vtkNamedColors.h>

//包含其他各类库的头文件
//#include "LBMS_Library.h"
//PCL库
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>

//PCL 1.12.0 中,默认情况下,Eigen 库使用的是 16 字节对齐。然而,某些情况下,可能会导致内存对齐不匹配的问题,从而引发错误。
//这将确保 Eigen 库使用与 PCL 相同的内存对齐方式
#define EIGEN_DEFAULT_ALIGN_BYTES 16

//Opencv库
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>   
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/highgui/highgui_c.h"

//C++库
#include <iostream>

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)//这里注意是自己的
    : QMainWindow(parent)//这里注意是自己的
{
    ui.setupUi(this);
    
//加载点云
pcl::PointCloud<pcl::PointXYZ>::Ptr myCloud(new pcl::PointCloud<pcl::PointXYZ>);
if //(pcl::io::loadPLYFile<pcl::PointXYZ>("C:\\Users\\LMY\\Desktop\\ply\\2024_04_01_14_58_22dep.ply", *myCloud) == -1) 
    (pcl::io::loadPCDFile<pcl::PointXYZ>("./room_scan1.pcd", *myCloud) == -1)
{
    //QMessageBox::information(NULL, "Title", "read failed!");
}
else {
    //QMessageBox::information(NULL, "Title", "read completed!");
}

//创建渲染器
vtkRenderer* ren = vtkRenderer::New();
//设置背景颜色为白色(0-1)
//ren->SetBackground(1.0, 1.0, 1.0);
//设置背景颜色为深灰色
ren->SetBackground(0.1, 0.1, 0.1);
//设置渐变颜色
//ren->SetGradientBackground(true);
//ren->SetBackground2(155.0, 155.0, 155.0);

//新建vtk点云类型
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
for (size_t i = 0; i < myCloud->size(); ++i) {
    pcl::PointXYZ p = myCloud->at(i);
    points->InsertNextPoint(p.x, p.y, p.z);
}

//新建vtk的点数据对象
vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();
polydata->SetPoints(points);

// 使用vtkVertexGlyphFilter将每个点变成一个小球体
vtkSmartPointer<vtkVertexGlyphFilter> vertexFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New();
vertexFilter->SetInputData(polydata);
vertexFilter->Update();

// 创建VTK的点数据mapper
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(vertexFilter->GetOutputPort());

// 创建VTK的actor
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);

//设置颜色和大小
vtkSmartPointer<vtkNamedColors> color = vtkSmartPointer<vtkNamedColors>::New();
actor->GetProperty()->SetColor(color->GetColor3d("White").GetData());
actor->GetProperty()->SetPointSize(5);

//创建相机视角
//vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New();
//ren->SetActiveCamera(cam);
//ren->ResetCamera();//聚焦
//加载点云
ren->AddActor(actor);

//开始渲染
ui.openGLWidget->renderWindow()->AddRenderer(ren);

//加载图片
QPixmap pic("./room_scan1.png");

//显示图片并自适应
ui.label->setPixmap(pic);
ui.label->setScaledContents(true);
}

QtWidgetsApplication1::~QtWidgetsApplication1()//这里注意是自己的
{}

测试完成,配置成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值