Pcl1.8.1+vs2015+qt5.9.1+vtk8.0.0配置
记录学习,(千里之行,始于足下) 在完成了pcl1.8.1与vs2015的配置添加链接描述,但是由于pcl中vt为不完整模块,需要重新从源码编译。所以又重新学习了了qt,vs2015,vtk8.0.0编译,编译完成之后可以结合qt强大的可视化模块,对点云库pcl进行学习和开发。
1.安装前的准备
1.qt5.9.1安装 安装包位置:http://download.qt.io/archive/qt/ 百度云: 链接:https://pan.baidu.com/s/1Fq8HVMr42JCDn1GQJLoaGA 提取码:la52 下载VtK8.0: 下载地址:https://gitlab.kitware.com/vtk/vtk/tree/v8.0.0 链接:https://pan.baidu.com/s/1L8heFB3wD-CQ0iwR3f9mDw 提取码:la53 下载cmake: https://cmake.org/download/。 链接:https://pan.baidu.com/s/13GeACwIHgDIC1MHFEDUb2g 提取码:la54
标题2.qt5.9.1安装
由于vs2015已经安装完成,所以直接安装qt5.9.1(未安装vs2015,建议先安装vs2015) 下载后点击安装,一直点下一步就可以(qt安装还是比较简单的)。
编译器根据自己的vs版本选择相应的版本安装即可。
选择安装位置,建议D:/F:盘。
然后等待完成(安装完成之后配置环境变量,并且打开qt creator测试安装是否正常)。
3.VS 安装QT插件
需要用到qt-vsaddin-msvc2015-2.2.0。 3.1点击“工具 —-> 扩展和更新”
3.2点击“联机”—->“搜索qt”—->”下载”
等待下载安装,安装完成之后关闭重新打开VS2017,在菜单栏多了一栏(Qt VS Tools),并点击,并选择” option”
点击“Qt versions”,按照步骤加入qt路径。
完成后新建项目,会出现qt模块,即成功。
4.cmake编译VTK源码
打开cmake,选择D:\vtk8.0\source\vtk-v8.0.0为源码路径,新建build文件夹为编译路径。
点击condigure,选择vs2015版本,x64
勾选shared_libs,可以不用选择testing和examples。
勾选VTK_Group_Qt之后configure
在之后出现的选择qmake.exe文件,如图
填入()和5(代表qt版本)
之后继续configure 选择如下图 Qt5_DIR :D:/qt5.9.1/5.9.1/msvc2015_64/lib/cmake/Qt5
继续
继续configure,直到没有红色,然后generate
Generate完之后,选择gengerate旁边的Open Project,会自动打开vs2015。 选择Release和x64版本
右键ALL_BUILLD,点击生成,然后等待编译完成(可能需要一段时间)。
最后点击右键Instal,点击生成。 If(如果遇到Install失败,并弹出以下:错误 1 error MSB3073: 命令“setlocal "D:\Program Files\CMake\bin\cmake.exe" -DBUILD_TYPE=Debug -P cmake_install.cmake if %errorlevel% neq 0 goto :cmEnd:cmEndendlocal & call :cmErrorLevel %errorlevel% & goto :cmDone:cmErrorLevelexit /b %1:cmDoneif %errorlevel% neq 0 goto :VCEnd:VCEnd”已退出,代码为 1) {打开 C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\ 找到 (VSLauncher.exe) 右键点击(VSLauncher.exe) 属性->兼容性->以管理员身份运行此程序 管理员身份打开vs2015 右键点击(Install) 仅用于项目->仅生成 然后生成成功 } Else { return }
然后以管理员身份打开vs2015,右键依次选择点击Install,仅用于项目,仅生成,然后生成成功。
将生成的D:\vtk8.0\new_build\bin\Release中的
以及D:\vtk8.0\new_build\lib\Release
复制到D:\qt5.9.1\5.9.1\msvc2015_64\plugins\designer中。
5.编译文件测试
左键开始
打开Designer,一般上上面为x32,下面为x64。
出现QVTKWidget控件。(release模式成功,但是debug模式编译的复制到D:\qt5.9.1\5.9.1\msvc2015_64\plugins\designer后,这个Designer会出现打不开的情况(不清楚原因))。
6.配置属性表
上一篇中新建了PCLRelease属性表并且配置完成。现在同样方法新建VTKrelease属性表。然后配置VTK属性表 VC++目录中: 包含目录:
库目录:
附加依赖项: vtkalglib-8.0.lib vtkChartsCore-8.0.lib vtkCommonColor-8.0.lib vtkCommonComputationalGeometry-8.0.lib vtkCommonCore-8.0.lib vtkCommonDataModel-8.0.lib vtkCommonExecutionModel-8.0.lib vtkCommonMath-8.0.lib vtkCommonMisc-8.0.lib vtkCommonSystem-8.0.lib vtkCommonTransforms-8.0.lib vtkDICOMParser-8.0.lib vtkDomainsChemistry-8.0.lib vtkDomainsChemistryOpenGL2-8.0.lib vtkexoIIc-8.0.lib vtkexpat-8.0.lib vtkFiltersAMR-8.0.lib vtkFiltersCore-8.0.lib vtkFiltersExtraction-8.0.lib vtkFiltersFlowPaths-8.0.lib vtkFiltersGeneral-8.0.lib vtkFiltersGeneric-8.0.lib vtkFiltersGeometry-8.0.lib vtkFiltersHybrid-8.0.lib vtkFiltersHyperTree-8.0.lib vtkFiltersImaging-8.0.lib vtkFiltersModeling-8.0.lib vtkFiltersParallel-8.0.lib vtkFiltersParallelImaging-8.0.lib vtkFiltersPoints-8.0.lib vtkFiltersProgrammable-8.0.lib vtkFiltersSelection-8.0.lib vtkFiltersSMP-8.0.lib vtkFiltersSources-8.0.lib vtkFiltersStatistics-8.0.lib vtkFiltersTexture-8.0.lib vtkFiltersTopology-8.0.lib vtkFiltersVerdict-8.0.lib vtkfreetype-8.0.lib vtkGeovisCore-8.0.lib vtkgl2ps-8.0.lib vtkglew-8.0.lib vtkGUISupportQt-8.0.lib vtkGUISupportQtSQL-8.0.lib vtkhdf5-8.0.lib vtkhdf5_hl-8.0.lib vtkImagingColor-8.0.lib vtkImagingCore-8.0.lib vtkImagingFourier-8.0.lib vtkImagingGeneral-8.0.lib vtkImagingHybrid-8.0.lib vtkImagingMath-8.0.lib vtkImagingMorphological-8.0.lib vtkImagingSources-8.0.lib vtkImagingStatistics-8.0.lib vtkImagingStencil-8.0.lib vtkInfovisCore-8.0.lib vtkInfovisLayout-8.0.lib vtkInteractionImage-8.0.lib vtkInteractionStyle-8.0.lib vtkInteractionWidgets-8.0.lib vtkIOAMR-8.0.lib vtkIOCore-8.0.lib vtkIOEnSight-8.0.lib vtkIOExodus-8.0.lib vtkIOExport-8.0.lib vtkIOExportOpenGL2-8.0.lib vtkIOGeometry-8.0.lib vtkIOImage-8.0.lib vtkIOImport-8.0.lib vtkIOInfovis-8.0.lib vtkIOLegacy-8.0.lib vtkIOLSDyna-8.0.lib vtkIOMINC-8.0.lib vtkIOMovie-8.0.lib vtkIONetCDF-8.0.lib vtkIOParallel-8.0.lib vtkIOParallelXML-8.0.lib vtkIOPLY-8.0.lib vtkIOSQL-8.0.lib vtkIOTecplotTable-8.0.lib vtkIOVideo-8.0.lib vtkIOXML-8.0.lib vtkIOXMLParser-8.0.lib vtkjpeg-8.0.lib vtkjsoncpp-8.0.lib vtklibharu-8.0.lib vtklibxml2-8.0.lib vtklz4-8.0.lib vtkmetaio-8.0.lib vtkNetCDF-8.0.lib vtknetcdf_c++.lib vtkoggtheora-8.0.lib vtkParallelCore-8.0.lib vtkpng-8.0.lib vtkproj4-8.0.lib vtkRenderingAnnotation-8.0.lib vtkRenderingContext2D-8.0.lib vtkRenderingContextOpenGL2-8.0.lib vtkRenderingCore-8.0.lib vtkRenderingFreeType-8.0.lib vtkRenderingGL2PSOpenGL2-8.0.lib vtkRenderingImage-8.0.lib vtkRenderingLabel-8.0.lib vtkRenderingLOD-8.0.lib vtkRenderingOpenGL2-8.0.lib vtkRenderingQt-8.0.lib vtkRenderingVolume-8.0.lib vtkRenderingVolumeOpenGL2-8.0.lib vtksqlite-8.0.lib vtksys-8.0.lib vtktiff-8.0.lib vtkverdict-8.0.lib vtkViewsContext2D-8.0.lib vtkViewsCore-8.0.lib vtkViewsInfovis-8.0.lib vtkViewsQt-8.0.lib vtkzlib-8.0.lib 然后保存即可(最好能熟悉保存路径,方便下次使用)。
7.完整配置测试
新建qt vs项目
点击下一步
一直确定至项目创建。 打开属性管理器窗口,右键添加现有属性表,并且将刚创建的VTKRelease属性表和下一篇中创建的PCLRelease属性表分别引入。
打开解决方案窗口,双击ui文件,进入界面编辑。
编写设计界面如下,注意控件名称。
将以下代码写入QVisuallPcl.h
#ifndef PCLVISUALIZER_H
#define PCLVISUALIZER_H
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <QtWidgets/QMainWindow>
#include "ui_QVisualPcl.h"
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <QDebug>
class QVisualPcl : public QMainWindow
{
Q_OBJECT
public:
QVisualPcl(QWidget *parent = Q_NULLPTR);
~QVisualPcl();
private:
Ui::QVisualPclClass ui;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
void initialVtkWidget();
private slots:
void onOpen();
void exit();
};
将以下代码写入QVisuallPcl.cpp
#include "QVisualPcl.h"
#include <QFileDialog>
#include <iostream>
#include <vtkRenderWindow.h>
QVisualPcl::QVisualPcl(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
initialVtkWidget();
connect(ui.actionOpen, &QAction::triggered, this, &QVisualPcl::onOpen);
connect(ui.actionexit, &QAction::triggered, this, &QVisualPcl::exit);
}
QVisualPcl::~QVisualPcl()
{
}
void QVisualPcl::initialVtkWidget()
{
cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
cout << 123 << endl;
viewer.reset(new pcl::visualization::PCLVisualizer("viewer", false));
viewer->addPointCloud(cloud, "cloud");
ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow());
viewer->setupInteractor(ui.qvtkWidget->GetInteractor(), ui.qvtkWidget->GetRenderWindow());
ui.qvtkWidget->update();
}
void QVisualPcl::onOpen()
{
QString filename = QFileDialog::getOpenFileName(this, tr("Open Point Cloud"), "F:/", tr("OpenPointCloud(*.pcd)"));
qDebug() << "1423" << endl;
if (!filename.isEmpty())
{
qDebug() << "14523" << endl;
std::string file_name = filename.toStdString();
pcl::PCLPointCloud2 cloud2;
Eigen::Vector4f origin;
Eigen::Quaternionf orientation;
int pcd_version;
int data_type;
unsigned int data_idx;
int offset = 0;
pcl::PCDReader rd;
rd.readHeader(file_name, cloud2, origin, orientation, pcd_version, data_type, data_idx, offset);
if (data_type == 0)
{
pcl::io::loadPCDFile(filename.toStdString(), *cloud);
}
else if (data_type == 2)
{
pcl::PCDReader reader;
reader.read<pcl::PointXYZ>(filename.toStdString(), *cloud);
}
viewer->updatePointCloud(cloud, "cloud");
viewer->resetCamera();
ui.qvtkWidget->update();
qDebug() << "1423" << endl;
}
}
void QVisualPcl::exit()
{
this->close();
}
点击生成,调试,如果出现缺少VTK_xxxx_8.0.dll的问题,将C:\Program Files (x86)\VTK\bin中的所有dll文件复制至C:\Windows\System32,可解决问题。
右键点击Open,打开所选的pdb文件,即可显示(注意保存pdb文件的路径不要有中文)。
至此,完成整个配置过程,可以开始学习了。
参考链接
参考链接(很详细) daguo的点云pcd文件(如果没有点云文件,提供一个点云文件:链接:https://pan.baidu.com/s/1iSMApxzvOv9tLfMVizEmaA 提取码:zfpk) (记得更改一下程序中你的PCD点云文件的路径)点击运行程序。
|