2021-04-07

vs2015+PCL1.8.1+VTK8.0.0+QT5.9.6

提示:首先感谢以下博主的经验,主要参考:

https://blog.csdn.net/qq_33676772/article/details/83478255

一、VS2015和PCL1.8.1的安装

参考:

https://blog.csdn.net/G_1205809706/article/details/115480161

或者联系我进行PCl属性表的添加

二、QT5.9.6的安装

http://download.qt.io/archive/qt/5.9/

附件附加项尽量加上

三、VTK8.0的安装

官网上已经更新到9.0.1 我找了半天没找到 最后找一个师兄要到的

链接:https://pan.baidu.com/s/1myqwoqieLhTi0C5cCkGYpg 
提取码:xi82 

复制这段内容后打开百度网盘手机App,操作更方便哦

安装cmake软件这里不加赘述 因为这个软件安装没啥技巧

  1. ,在D盘下创建一个VTK文件夹,在该文件夹下创建vtk_src和vtk_bin; 在vtk_src下解压VTK8.0,备用
  2. 启动CMake,将路径写好,如下图,点击Configure
    在这里插入图片描述
    选 Visual Studio 14 2015 Win32(本人是在pcl1.8.1 32位下实现的),点击finish,等待配置完成。
    在这里插入图片描述
    选择BUILD_SHADRED_LIBS,如图
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407132032432.png在这里插入图片描述
    安装目录:这里安装目录通常在c/program files/VTK 本人不想放C盘 放在D盘自己创建的地方
    在这里插入图片描述
    如果有改动位置 那么还需要改动下面这些项目
    在这里插入图片描述
    接下来:
    如图勾选
    在这里插入图片描述
    完成上述三个设置后,点击Configure,会出现VTK_Qt_Group错误,如下在这里插入图片描述
    再次点击Configure继续,中间可能出现红色文字的警告,不用管。

配置成功后,出现Configure done提示。
点击Generate生成工程
再点击运行
打开工程后,选择Release和x86(win32)(我做重建界面使用的事release32位),默认启动项为ALL_BUILD,鼠标右键直接选择生成即可
一般不会有错误 如果有错误就是你瞎用了版本,PCL1.8.1环境中指定的是使用VTK8.0.0 ,发生错误 自己去找对应环境的VTK版本 选INSTALL,右键点生成,很快就生成了
在这里插入图片描述

然后就是为Qt Designer安装QVTKWidget插件:

在这里插入图片描述

在这里插入图片描述

复制这三文件到自己QT路径下msvc2015_64\plugins\designer\目录中

这时你就能启动Qt Designer,这里有两个版本,一般上面是32位,下面是64位。根据编译对应的32位版本会出现上面的含有VTK控件

在这里插入图片描述
3. 配置VTK和PCLRelease32属性表:如下

在这里插入图片描述
然后就会在当前目录下生成

在这里插入图片描述
VTK配置如下:
1 电脑环境变量中添加
在这里插入图片描述
2. 包含目录

D:\VTK\VTK-source\include\vtk-8.0
D:\VTK\VTK-source\bin

3.库目录

D:\VTK\VTK-source\lib

4.附加依赖项

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+VS2015的拓展工具安装这里不加赘述

五、点云可视化的实现(重点)

打开VS2015,新建一个工程Qt GUI Application,命名x86sh,建好后对应文件如图:
在这里插入图片描述
在这里插入图片描述
三文件如下
.h

#pragma once
#include <vtkAutoInit.h> 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

#include <QtWidgets/QMainWindow>
#include "ui_x86show.h"
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/PolygonMesh.h>
#include <pcl/io/ply_io.h>
#include <vtkRenderWindow.h>

class x86show : public QMainWindow
{
    Q_OBJECT

public:
    x86show(QWidget *parent = Q_NULLPTR);

	

private:
    Ui::x86showClass ui;

	//点云数据存储
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;

	//初始化vtk部件
	void initialVtkWidget();

	

private slots:
	//创建打开槽
	void onOpen();

};

.cpp文件
#include "x86show.h"

#include <QFileDialog>
#include <iostream>
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;

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

	//初始化
	initialVtkWidget();

	//pcl::io::loadPCDFile("bunny.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();


//  https://blog.csdn.net/KLNSDFHUASF/article/details/102506056?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242
	//pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::io::loadPLYFile<pcl::PointXYZ>("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("object_mesh.ply", mesh);   //将PLY文件读取并存为PolygonMesh类型

	//pcl::visualization::PCLVisualizer viewer("PCL PolygonMesh");  //显示名字
	//viewer.addPolygonMesh(mesh);
	//while (!viewer.wasStopped())
	//{
	//	viewer.spinOnce();
	//}
	//boost::shared_ptr<pcl::visualization::PCLVisualizer> 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();
}



//
void x86show::initialVtkWidget()
{
	cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
	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 x86show::onOpen()
{

	
	QString fileName = QFileDialog::getOpenFileName(this, "Open PointCloud", ".", "Open PCD files(*.pcd)");
	if (!fileName.isEmpty())
	{
		std::string file_name = fileName.toStdString();

		//sensor_msgs::PointCloud2 cloud2;

		pcl::PCLPointCloud2 cloud2;

		//pcl::PointCloud<Eigen::MatrixXf> 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<pcl::PointXYZ>(fileName.toStdString(), *cloud);
		}

		viewer->updatePointCloud(cloud, "cloud");
		viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "cloud");
		viewer->resetCamera();
		ui.qvtkWidget->update();
	}
	
}

ui界面如上:
在这里插入图片描述
运行界面:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其次这个工程不能放的目录阶数太多,就放桌面就能运行,因为是读取目录路径文件

最后会出现

0x779E41AD (vtkGUISupportQt-8.0.dll)处(位于 Qtpointcshow.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突。

这时需要参考链接

https://blog.csdn.net/zy2317878/article/details/80374541?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs

还有一些错误 我忘记了 大概是内存指针溢出,还有需要进行点云的定义

花时间和请教师兄 自己摸索了三天 能帮到您希望能够点赞,需要资料问问题可以加我,共同探讨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gongx_1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值