当前位置:   article > 正文

六、在Qt下通过PCL在VTK9.3.0下显示自己的pcd点云文件_qt vtk 9.3

qt vtk 9.3

前几天刚整理好VTK8.2.0,发现我们的项目使用的PCL自带的VTK是9.3.0的,脸黑了快
VTK8.2.0可参考该篇博文:五、在Qt下加载QVTKWidget控件(VTK8.2.0),生成Visual Studio项目,显示点云(C++)
没办法,重新搞下VTK9.3.0

区别:VTK8.2.0采用的是拖拽QVTKWidget控件进行相应的操作;
VTK9.3.0把这个控件给取消掉了,但是封装了QVTKOpenGLNativeWidget类,该类是一个自定义控件,继承了OpenGL Widget控件。使用的时候,需要拖拽一个OpenGL Widget控件然后提升为QVTKOpenGLNativeWidget即可;可以看出VTK官网是提倡用户进行自定义控件的~~

一、下载解压VTK9.3.0

我下载的是v9.3.0
在这里插入图片描述
老规矩,VTK-9.3.0-src存放源码,将下载好的源码文件解压到这里
VTK-9.3.0-build用于ALL_BUILD的时候存放路径
VTK-9.3.0-install-release用于INSTALL的时候存放路径
我只需要release不需要debug

在这里插入图片描述

附加其他内容: 既需要release又需要用到debug的操作如下:
多创建一个文件夹VTK-9.3.0-install-debug,CMake的时候build路径选择VTK-9.3.0-install-debug
1,ALL_BUILD Release x64
2,INSTALL Release
运行完之后,将VTK-9.3.0-install-debug内容剪切到VTK-9.3.0-install-release
这算是最终的Release的内容 然后重复操作再次
1,ALL_BUILD Debug x64
2,INSTALL Debug
运行完之后,VTK-9.3.0-install-debug文件夹下的内容就是最终的Debug的内容

二、CMake编译下VTK9.3.0

选好源码文件位置(E:/VTK9.3.0/VTK-9.3.0-src)和build文件位置(E:/VTK9.3.0/VTK-9.3.0-build),直接Configure一下
在这里插入图片描述

1,CMAKE_INSTALL_PREFIX

选择VTK编译之后的库存放的位置,E:/VTK9.3.0/VTK-9.3.0-install-release/
在这里插入图片描述

2,找到所有包含qt的

①VTK下面的全都设置为WANT,且版本设置为5

在这里插入图片描述

②Ungrouped Entries下的Qt路径要确定下是不是自己的Qt路径

我的这里系统默认是的Anaconda下的Qt路径,需要修改一下
在这里插入图片描述

3,再次Configure,不暴红,全是白色的即可进行Generate和Open Project操作

三、Open Project

1,生成 —> 批生成

①选择ALL_BUILD Release x64生成

在这里插入图片描述
时间有点久,生成完之后记得把 **√** 给取消掉哈

②选择INSTALL Release x64生成

在这里插入图片描述
这个比较快

生成完成之后可以看到文件夹下(E:\VTK9.3.0\VTK-9.3.0-install-release)多出来四个文件夹
ps:VTK8.2.0会生成五个文件夹,多一个plugins
在这里插入图片描述

2,配置VTK属性表

新建一个Qt项目,例如:VTK9.3.0
新建一个属性表,例如:vtk930,用于配置VTK
新建一个属性表,例如:pcl_new_vtk,用于配置PCL

①VC++目录

包含目录E:\VTK9.3.0\VTK-9.3.0-install-release\include\vtk-9.3
在这里插入图片描述
库目录E:\VTK9.3.0\VTK-9.3.0-install-release\lib
在这里插入图片描述

②链接器 --> 输入 --> 附加依赖项

也就是文件夹E:\VTK9.3.0\VTK-9.3.0-install-release\lib里面所有lib文件的具体名称

在这里插入图片描述
敲黑板!!!小技巧:
打开cmd
输入命令:
E:
cd E:\VTK9.3.0\VTK-9.3.0-install-release\lib
DIR *.lib*/b>YY.txt // 语句的意思是将此路径下的所后缀是.lib*的文件(*.lib**为通配符,最后一个也有一个*哈),以名称(/b)的形式写入到YY.txt
在这里插入图片描述
YY.txt里面的内容复制到附加依赖项即可
在这里插入图片描述

vtkcgns-9.3.lib
vtkChartsCore-9.3.lib
vtkCommonColor-9.3.lib
vtkCommonComputationalGeometry-9.3.lib
vtkCommonCore-9.3.lib
vtkCommonDataModel-9.3.lib
vtkCommonExecutionModel-9.3.lib
vtkCommonMath-9.3.lib
vtkCommonMisc-9.3.lib
vtkCommonSystem-9.3.lib
vtkCommonTransforms-9.3.lib
vtkDICOMParser-9.3.lib
vtkDomainsChemistry-9.3.lib
vtkDomainsChemistryOpenGL2-9.3.lib
vtkdoubleconversion-9.3.lib
vtkexodusII-9.3.lib
vtkexpat-9.3.lib
vtkFiltersAMR-9.3.lib
vtkFiltersCellGrid-9.3.lib
vtkFiltersCore-9.3.lib
vtkFiltersExtraction-9.3.lib
vtkFiltersFlowPaths-9.3.lib
vtkFiltersGeneral-9.3.lib
vtkFiltersGeneric-9.3.lib
vtkFiltersGeometry-9.3.lib
vtkFiltersGeometryPreview-9.3.lib
vtkFiltersHybrid-9.3.lib
vtkFiltersHyperTree-9.3.lib
vtkFiltersImaging-9.3.lib
vtkFiltersModeling-9.3.lib
vtkFiltersParallel-9.3.lib
vtkFiltersParallelImaging-9.3.lib
vtkFiltersPoints-9.3.lib
vtkFiltersProgrammable-9.3.lib
vtkFiltersReduction-9.3.lib
vtkFiltersSelection-9.3.lib
vtkFiltersSMP-9.3.lib
vtkFiltersSources-9.3.lib
vtkFiltersStatistics-9.3.lib
vtkFiltersTensor-9.3.lib
vtkFiltersTexture-9.3.lib
vtkFiltersTopology-9.3.lib
vtkFiltersVerdict-9.3.lib
vtkfmt-9.3.lib
vtkfreetype-9.3.lib
vtkGeovisCore-9.3.lib
vtkgl2ps-9.3.lib
vtkglew-9.3.lib
vtkGUISupportQt-9.3.lib
vtkGUISupportQtQuick-9.3.lib
vtkGUISupportQtSQL-9.3.lib
vtkhdf5-9.3.lib
vtkhdf5_hl-9.3.lib
vtkImagingColor-9.3.lib
vtkImagingCore-9.3.lib
vtkImagingFourier-9.3.lib
vtkImagingGeneral-9.3.lib
vtkImagingHybrid-9.3.lib
vtkImagingMath-9.3.lib
vtkImagingMorphological-9.3.lib
vtkImagingSources-9.3.lib
vtkImagingStatistics-9.3.lib
vtkImagingStencil-9.3.lib
vtkInfovisCore-9.3.lib
vtkInfovisLayout-9.3.lib
vtkInteractionImage-9.3.lib
vtkInteractionStyle-9.3.lib
vtkInteractionWidgets-9.3.lib
vtkIOAMR-9.3.lib
vtkIOAsynchronous-9.3.lib
vtkIOCellGrid-9.3.lib
vtkIOCesium3DTiles-9.3.lib
vtkIOCGNSReader-9.3.lib
vtkIOChemistry-9.3.lib
vtkIOCityGML-9.3.lib
vtkIOCONVERGECFD-9.3.lib
vtkIOCore-9.3.lib
vtkIOEnSight-9.3.lib
vtkIOExodus-9.3.lib
vtkIOExport-9.3.lib
vtkIOExportGL2PS-9.3.lib
vtkIOExportPDF-9.3.lib
vtkIOFLUENTCFF-9.3.lib
vtkIOGeometry-9.3.lib
vtkIOHDF-9.3.lib
vtkIOImage-9.3.lib
vtkIOImport-9.3.lib
vtkIOInfovis-9.3.lib
vtkIOIOSS-9.3.lib
vtkIOLegacy-9.3.lib
vtkIOLSDyna-9.3.lib
vtkIOMINC-9.3.lib
vtkIOMotionFX-9.3.lib
vtkIOMovie-9.3.lib
vtkIONetCDF-9.3.lib
vtkIOOggTheora-9.3.lib
vtkIOParallel-9.3.lib
vtkIOParallelXML-9.3.lib
vtkIOPLY-9.3.lib
vtkIOSegY-9.3.lib
vtkIOSQL-9.3.lib
vtkioss-9.3.lib
vtkIOTecplotTable-9.3.lib
vtkIOVeraOut-9.3.lib
vtkIOVideo-9.3.lib
vtkIOXML-9.3.lib
vtkIOXMLParser-9.3.lib
vtkjpeg-9.3.lib
vtkjsoncpp-9.3.lib
vtkkissfft-9.3.lib
vtklibharu-9.3.lib
vtklibproj-9.3.lib
vtklibxml2-9.3.lib
vtkloguru-9.3.lib
vtklz4-9.3.lib
vtklzma-9.3.lib
vtkmetaio-9.3.lib
vtknetcdf-9.3.lib
vtkogg-9.3.lib
vtkParallelCore-9.3.lib
vtkParallelDIY-9.3.lib
vtkpng-9.3.lib
vtkpugixml-9.3.lib
vtkRenderingAnnotation-9.3.lib
vtkRenderingCellGrid-9.3.lib
vtkRenderingContext2D-9.3.lib
vtkRenderingContextOpenGL2-9.3.lib
vtkRenderingCore-9.3.lib
vtkRenderingFreeType-9.3.lib
vtkRenderingGL2PSOpenGL2-9.3.lib
vtkRenderingHyperTreeGrid-9.3.lib
vtkRenderingImage-9.3.lib
vtkRenderingLabel-9.3.lib
vtkRenderingLICOpenGL2-9.3.lib
vtkRenderingLOD-9.3.lib
vtkRenderingOpenGL2-9.3.lib
vtkRenderingQt-9.3.lib
vtkRenderingSceneGraph-9.3.lib
vtkRenderingUI-9.3.lib
vtkRenderingVolume-9.3.lib
vtkRenderingVolumeOpenGL2-9.3.lib
vtkRenderingVtkJS-9.3.lib
vtksqlite-9.3.lib
vtksys-9.3.lib
vtkTestingRendering-9.3.lib
vtktheora-9.3.lib
vtktiff-9.3.lib
vtkverdict-9.3.lib
vtkViewsContext2D-9.3.lib
vtkViewsCore-9.3.lib
vtkViewsInfovis-9.3.lib
vtkViewsQt-9.3.lib
vtkWrappingTools-9.3.lib
vtkzlib-9.3.lib
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154

在这里插入图片描述

3,配置PCL属性表

①VC++目录

包含目录:
E:\Program Files\PCL 1.14.0\bin
E:\Program Files\PCL 1.14.0\3rdParty\Boost\include\boost-1_84
E:\Program Files\PCL 1.14.0\3rdParty\Eigen3\include\eigen3
E:\Program Files\PCL 1.14.0\3rdParty\OpenNI2\Include
E:\Program Files\PCL 1.14.0\3rdParty\FLANN\include
E:\Program Files\PCL 1.14.0\3rdParty\Qhull\include
E:\Program Files\PCL 1.14.0\include\pcl-1.14
发现没,没有配置PCL自带的VTK,这点要注意哈,因为之前的VTK配置过了,这里不适应PCL自带的VTK了
在这里插入图片描述
库目录
E:\Program Files\PCL 1.14.0\3rdParty\OpenNI2\Lib
E:\Program Files\PCL 1.14.0\3rdParty\Qhull\lib
E:\Program Files\PCL 1.14.0\3rdParty\FLANN\lib
E:\Program Files\PCL 1.14.0\3rdParty\Boost\lib
E:\Program Files\PCL 1.14.0\lib
发现了吧,也没有配置PCL自带的VTK!
在这里插入图片描述

②链接器 --> 输入 --> 附加依赖项

也就是你安装的PCL所在文件夹E:\Program Files\PCL 1.14.0\lib里面所有lib文件的具体名称
在这里插入图片描述

配置VTK属性表中有所介绍,这里就不再赘述了,

在这里插入图片描述
在这里插入图片描述

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

在这里插入图片描述

4,配置系统环境变量

VTK:E:\VTK9.3.0\VTK-9.3.0-install-release\bin
PCL:E:\Program Files\PCL 1.14.0
在这里插入图片描述
在这里插入图片描述

四、QVTKOpenGLNativeWidget控件

拖拽一个openGLWidget控件
我的是QMainWindow,这里就添加一个菜单项进行打开pcd文件
在这里插入图片描述
右击OpenGL Widget控件,选择提升为
在这里插入图片描述
提升为QVTKOpenGLNativeWidget控件
基类名称:QOpenGLWidget
提升的类名称:QVTKOpenGLNativeWidget
头文件:qvtkopenglnativewidget.h
在这里插入图片描述
我们也可以在E:\VTK9.3.0\VTK-9.3.0-install-release\include\vtk-9.3下也找到这个头文件
在这里插入图片描述

最终控件的效果如下
在这里插入图片描述

五、通过PCL在QVTKOpenGLNativeWidget中显示PCD文件

我的测试项目结构如下
在这里插入图片描述

1,main.cpp

压根没动,默认即可

#include "VTK930.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    VTK930 w;
    w.show();
    return a.exec();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2,VTK930.h

#pragma once

#include "ui_VTK930.h"

#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <vtkGenericOpenGLRenderWindow.h>


class VTK930 : public QMainWindow {
  Q_OBJECT

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

 private:
  Ui::VTK930Class ui;

  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
  boost::shared_ptr<pcl::visualization::PCLVisualizer> view;

  void initialVtkWidget();

 private slots:
  void onOpen();
};

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

3,VTK930.cpp

#include "VTK930.h"
#include <QFileDialog>

VTK930::VTK930(QWidget *parent) : QMainWindow(parent) {
  ui.setupUi(this);

  initialVtkWidget();

  connect(ui.actionOpen, SIGNAL(triggered()), this, SLOT(onOpen()));
}

VTK930::~VTK930() {}

void VTK930::onOpen() {

  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(
      new pcl::PointCloud<pcl::PointXYZ>());  
  QString fileName = QFileDialog::getOpenFileName(this, "Open PointCloud", ".",
                                                  "Open PCD files(*.pcd)");
  if (fileName == "") return;
  pcl::io::loadPCDFile(fileName.toStdString(), *cloud);
  view->addPointCloud(cloud, "cloud");
  view->resetCamera(); 
  view->spin();
  ui.openGLWidget->update();
}

void VTK930::initialVtkWidget() {
  vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
  vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow =
      vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
  renderWindow->AddRenderer(renderer);
  view.reset(new pcl::visualization::PCLVisualizer(renderer, renderWindow,
                                                   "viewer", false));
  view->setupInteractor(ui.openGLWidget->interactor(),
                        ui.openGLWidget->renderWindow());
  ui.openGLWidget->setRenderWindow(view->getRenderWindow());
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

六、运行效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、其他

经过这几天的学习,发现了很多问题,网上出现QTWidget控件的大都是VTK8.2.0版本之前的,而且VTK9.3.0与之前的版本确实有很大的差异,还得去花功夫认真研究学习

E:\VTK9.3.0\VTK-9.3.0-install-release\include\vtk-9.3下的QVTKOpenGLWindow.h
这个头文件就跟之前控件(QVTKWidget)所含有的函数方法有很多差异的地方,需要多研究学习,加油吧!!!
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/986275
推荐阅读
相关标签
  

闽ICP备14008679号