VS2017 中配置QT+PCL显示点云或3D图形

VS2017 中在QT中显示点云或3D图形

在VS2017中,想要在qt生成界面中显示点云,但是pcl的vtk并没有,所以需要自己编译。
原因:因为没有单独安装VTK,PCL中安装版中自带的vtk缺少QVTKWidget.dll,这样在QT Designer中就无法显示点云,故需自己编译VTK。

前提:已经安装好VS2017、QT5.9.、PCL1.81、CMake(是使用CMake编译)(大版本对应就可按此方法进行VTK编译)

工具 : vtk8.0.1的链接在这https://https://gitlab.kitware.com/vtk/vtk/tree/v8.0.1
(因为PCL1.81中自带的VTK是8.0版本,故需下载vtk8.0开头版本)

安装过程

1.将下载好的安装包VTK安装包复制到PCL安装目录3rdParty下解压(后期可删除),然后将原VTK文件夹备份为VTK_copy(若成功可删除,不成功可还原),并新建空文件夹VTK代替。
VS2017 中配置QT+PCL显示点云或3D图形_第1张图片
pcl的安装目录,在3rdParty下有自带的VTK,我们先备份VTK文件夹为VTK_copy,然后一个空VTK文件夹,把编译后的VTK就放到这个新建的VTK文件夹下,(QT自带编码不能识别window下中文或空格,注意这点,路径尽量不要含有中文)。

2.cmake编译VTK步骤
2.1 打开cmake-gui进行配置,首先在解压的vtk8.0.1文件夹中新建一个空文件夹build。
VS2017 中配置QT+PCL显示点云或3D图形_第2张图片
source code :VTK-8.1.1.zip解压后的目录
build the binaries :在VTK-8.1.1.zip解压后的目录下新建一个build目录
2.2 点击configure, 选择编译器
VS2017 中配置QT+PCL显示点云或3D图形_第3张图片
注意选择自己的配置。
2.3 configure完成之后一片红,但是不用担心,因为我们还没有开始配置
勾选Grouped和Advanced,进行以下设置:
BUILD下取消勾选BUILD_TESTING,只留BUILD_SHARED_LIBS就行了VS2017 中配置QT+PCL显示点云或3D图形_第4张图片CMAKE下CMAKE_INSTALL_PREFIX设置为你新建的VTK文件夹在这里插入图片描述INSTALL下目录也替换成你新建的VTK文件夹在这里插入图片描述VTK下勾选VTK_Group_Qt,VTK_RENDERING_BACKEND设置为OpenGL(这里一定要注意,否则pcl显示框会出错)。在这里插入图片描述在这里插入图片描述
点击Add Entry,添加CMAKE_DEBUG_POSTFIX,Value设置为-gd(用来区别debug和release版本)VS2017 中配置QT+PCL显示点云或3D图形_第5张图片
再次点击configure
编译vtk-8.0.1的时候,由于qt默认版本号是4,这里的5.10的qt会报错,修改为5即可
VS2017 中配置QT+PCL显示点云或3D图形_第6张图片
再次configure qt5已经自动识别出来了,目录正确,无需修改,点击configure
点击generate
点击open project 自动打开vs
VS2017 中配置QT+PCL显示点云或3D图形_第7张图片
首先Debug x64下,右键ALL_BUILD重新生成,再右键INSTALL设置为启动项目、重新生成;
然后Release x64下,右键ALL_BUILD重新生成,再右键INSTALL设置为启动项目、重新生成;
一般都会成功,不成功就是你之前的问题了。

然后将3rdParty\VTK\plugins\designer下的QVTKWidgetPlugin.dll拷贝到Qt5.9.2\5.9.2\msvc2017_64\plugins\designer下,这样Qt Designer里面就有了QVtk的控件了。

测试

新建QT工程打开Qt Designer发现已经有了QVtk的控件了VS2017 中配置QT+PCL显示点云或3D图形_第8张图片
示例:

#include "PCLViewer.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace pcl;
using namespace pcl::io;
using namespace std;
//vtk
#include 
PCLViewer::PCLViewer(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	//显示点云
	//初始化点云
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	//pcl::io::loadPLYFile("Laurana50k.ply", *cloud);  //使用点云文件  ply
	pcl::io::loadPCDFile("rabbit.pcd", *cloud);  //使用点云文件 pcb

	//声明视窗
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
	//设置视窗背景色
	viewer->setBackgroundColor(0, 0, 0);
	//预处理点云颜色
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> magenta(cloud, 255, 0, 255);
	//把点云加载到视窗
	viewer->addPointCloud(cloud, magenta, "cloud");
	//设置点云大小
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "cloud");

	//连接qvtk
	ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow());
	ui.qvtkWidget->update();
	
	///*显示曲面*/
	//pcl::PolygonMesh mesh;  创建多变形网格,用于存储结果
	//pcl::io::loadPolygonFilePLY("Laurana50k.ply", mesh);   //将PLY文件读取并存为PolygonMesh类型

	pcl::visualization::PCLVisualizer viewer("PCL PolygonMesh");  //显示名字
	viewer.addPolygonMesh(mesh);
	while (!viewer.wasStopped())
	{
		viewer.spinOnce();
	}
	//boost::shared_ptr viewer(new pcl::visualization::PCLVisualizer("3D viewer"));
	//viewer->setBackgroundColor(0, 0, 0);  //设置背景
	//viewer->addPolygonMesh(mesh, "triangles");  //设置显示的网格
	//viewer->addCoordinateSystem(0.1);  //设置坐标系
	//viewer->initCameraParameters();
	连接qvtk
	//ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow());
	//ui.qvtkWidget->update();
}

运行结果:
显示点云 .pcb文件
VS2017 中配置QT+PCL显示点云或3D图形_第9张图片
显示表面 .ply文件
VS2017 中配置QT+PCL显示点云或3D图形_第10张图片
上图两个点云文件rabbit.pcd、Laurana50k.ply,上图代码直接将文件放在工程目录下就行。
下载链接:

你可能感兴趣的:(3D,C++,PCL,QT,VTK)