首先感谢以下博主的经验,此外对于软件的安装就不过多介绍,主要讲解关键点,废话不多说。
https://blog.csdn.net/jepco1/article/details/80628026?utm_source=blogxgwz4
https://blog.csdn.net/qq_42570058/article/details/81989876?utm_source=blogxgwz8
关于PCL1.8.1的安装,参考上一篇文章https://blog.csdn.net/qq_33676772/article/details/83273752。
官网下载,正常安装,本人的安装路径:G:\Qt5.9.1
http://download.qt.io/archive/qt/5.9/
官网下载http://www.vtk.org/download/
此外,还要用到CMake工具,可以从https://cmake.org/download/ 免费下载,CMake下载后正常安装。
a. 解压VTK8.0,备用
b. CMake配置VTK for Qt编译环境:
创建VTK文件夹,在此文件夹下新建两个如下图所示的文件夹:vtk_src和vtk_bin,将解压的VTK8.0放入vtk_src文件夹下。
启动CMake,将路径写好,如下图,点击Configure
选 Visual Studio 14 2015 Win64,点击finish,等待配置完成。
选择BUILD_SHADRED_LIBS,如图:
安装目录:
如图勾选:
完成上述三个设置后,点击Configure,会报错,正常的现象,继续配置。
第1次配置完成后,会提示用户输入Qt5_DIR和VKT_QT_VERSION。
将Qt5_DIR修改为G:/Qt5.9.1/5.9.1/msvc2015_64/lib/cmake/Qt5。
将VKT_QT_VERSION设置为5。
可能还需要修改以下的路径,对应着修改:
再次点击Configure继续,中间可能出现红色文字的警告,不用管。
配置成功后,出现Configure done提示。
点击Generate生成工程。
c. 启动VS2015开始编译:
以管理员命令启动VS2015,然后VS2015中打开vtk_bin文件夹下的VTK.sln
打开工程后,选择Release和x64,默认启动项为ALL_BUILD,鼠标右键直接选择生成即可。
等了一段时间,然后就成功了,如果有失败,必须删除vtk_bin文件夹下所有文件,重头再来。
选INSTALL,右键点生成,很快就生成了
编译结果如下图:
d. 为Qt Designer安装QVTKWidget插件:
将下图所示的三个东西,复制到G:\Qt5.9.1\5.9.1\msvc2015_64\plugins\designer\目录。
启动Qt Designer,这里有两个版本,一般上面是32位,下面是64位。根据编译的版本选择。
在左侧widget box的最下方可以看到QVTKWidget说明插件安装成功。
e.配置VTK和PCLRelease64属性表:
PCLRelease64属性表参考上篇博客。
点击属性管理器,在Release|x64右击,添加新项目属性表,取名VTKRelease64,如下图:
双击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
配置好后,有两个属性表文件。
在工具菜单中选择扩展和更新
在联机中选择Qt Visual Studio Tools安装。
安装成功后,菜单上会出现Qt VS Tools,点击Qt Options,如图设置。
a. 打开VS2015,新建一个工程Qt GUI Application,命名PCLVisualizer,建好后对应文件如图:
b. 解决方案资源管理器中,双击下图UI文件
将QVTK拖进UI界面,调整大小,再上述菜单栏中依次输入File,按下回车确定,再分别输入Open回车、Exit回车确定,保存退出。
回到VS2015,右键上述UI文件,先编译。
在工程文件夹下出现一个ui_pclvisualizer.h的头文件,将此文件复制到上一层文件夹下。
c. 添加代码:
双击main.cpp:
#include "pclvisualizer.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
PCLVisualizer w;
w.show();
return a.exec();
}
双击pclvisualizer.cpp:
#include
#include
#include
#include "pclvisualizer.h"
#include
#pragma execution_character_set("utf-8")
PCLVisualizer::PCLVisualizer(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//初始化
initialVtkWidget();
//连接信号和槽
connect(ui.actionOpen, &QAction::triggered, this, &PCLVisualizer::onOpen);
connect(ui.actionExit, &QAction::triggered, this, &PCLVisualizer::exit);
}
PCLVisualizer::~PCLVisualizer()
{
}
void PCLVisualizer::initialVtkWidget()
{
cloud.reset(new pcl::PointCloud);
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 PCLVisualizer::onOpen()
{
//只能打开PCD文件
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open PointCloud"), ".",
tr("Open PCD files(*.pcd)"));
if (!fileName.isEmpty())
{
std::string file_name = fileName.toStdString();
//sensor_msgs::PointCloud2 cloud2;
pcl::PCLPointCloud2 cloud2;
//pcl::PointCloud 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);
if (data_type == 0)
{
pcl::io::loadPCDFile(fileName.toStdString(), *cloud);
}
else if (data_type == 2)
{
pcl::PCDReader reader;
reader.read(fileName.toStdString(), *cloud);
}
viewer->updatePointCloud(cloud, "cloud");
viewer->resetCamera();
ui.qvtkWidget->update();
}
}
void PCLVisualizer::exit()
{
this->close();
}
双击pclvisualizer.h:
#ifndef PCLVISUALIZER_H
#define PCLVISUALIZER_H
#include
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include
#include
#include
#include
#include "ui_pclvisualizer.h"
class PCLVisualizer : public QMainWindow
{
Q_OBJECT
public:
PCLVisualizer(QWidget *parent = 0);
~PCLVisualizer();
private:
Ui::PCLVisualizerClass ui;
//Ui::PCLVisualizerClass ui;
//点云数据存储
pcl::PointCloud::Ptr cloud;
boost::shared_ptr viewer;
//初始化vtk部件
void initialVtkWidget();
private slots:
//创建打开槽
void onOpen();
void exit();
//void setcolor();
};
#endif // PCLVISUALIZER_H
d. 添加属性表和修改项目属性:
代码添加完成后还是有很多红色下划线的报错,还要添加之前新建的两个属性表:
修改项目属性(这步很重要,很多博客都没有这一步,导致出现问题不知道怎么解决),调试,修改工作目录和环境的路径
依然使用上一篇博客用到的bunny.pcd文件来测试,文件下载地址:https://pan.baidu.com/s/1sJYz1QVZ09YSdKSmUos7fQ
VS2015调试,出现下图所示窗体。
单击File-->Open-->bunny.pcd,显示点云:
到此为止,配置就成功,本人配置了快一星期,中途好几次要放弃了,最终还是成功了,如果出现问题,很可能是路径的问题,记住一定要按照我写的对应的路径走,也希望我的经验对大家有帮助,有问题欢迎指正!
之前在用VTK7.0版本配置的时候,在编译的时候成功了,但是最后的程序调试时就会发生以下错误:
配置了几次都是一样的错误,所以我认为是VTK版本的问题,换成VTK8.0配置时就成功了。