(三)QT中使用QVTKOpenGLNativeWidget的简单教程以及案例,利用PCLVisualizer显示点云

先添加一个带有ui的QT应用程序。

一、在ui界面中添加QVTKOpenGLNativeWidget控件

先拖出来一个QOpenGLWidget控件

修改布局如下:

然后将QOpenGLWidget控件提升为QVTKOpenGLNativeWidget控件,步骤如下:

右击QOpenGLWidget窗口,选择【提示为...】

 输入提升的类名称为QVTKOpenGLNativeWidget

 此时需要把自动生成的qvtkopenglnativewidget.h修改为QVTKOpenGLNativeWidget.h,否则报错找不到qvtkopenglnativewidget.h头文件,因为下载下来的头文件名称为QVTKOpenGLNativeWidget.h。

点击【添加】按钮。

选中提升的类,点击【提升】按钮。

二、修改.pro文件,添加所需库

INCLUDEPATH += /usr/include/eigen3INCLUDEPATH += /usr/local/include/vtk-8.2
LIBS += /usr/local/lib/libvtk*.soINCLUDEPATH += /usr/local/include/pcl-1.13
LIBS += /usr/local/lib/libpcl_*.so

三、添加所需头文件

#include <vtkRenderWindow.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/point_types.h>//各种格式的点的头文件
#include <pcl/io/pcd_io.h>
#include <vtkGenericOpenGLRenderWindow.h>

四、显示点云代码

先在头文件widget.h中添加

    boost::shared_ptr< pcl::visualization::PCLVisualizer > view;

在widget.cpp文件中的构造函数中添加初始化

    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->guiwidget->GetInteractor(),ui->guiwidget->GetRenderWindow());ui->guiwidget->SetRenderWindow(view->getRenderWindow());

添加按钮的点击事件对应的槽函数,添加加载点云的代码

    //读取pcd文件并显示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();    //视角ui->guiwidget->update();

在main.cpp中引用下面头文件并在QApplication调用前添加下面代码,解决报opengl版本过低的问题。

#include <QSurfaceFormat>
#include "QVTKOpenGLNativeWidget.h"
QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());

全部整体代码见下图:

五、运行程序

运行界面如下:

点击【load_pcd】按钮加载点云的pcd文件。

pcd文件可直接在解压的pcl源文件中的test文件夹中查看。

但是存在一个问题:加载完文件之后,需要点击一下视图或者对视图进行一下缩放操作才能出现点云数据图像,之前用VTKWidget时加载完文件可以直接显示出来。如果有知道此问题出现的原因以及解决办法的网友,希望评论告知,感谢!

也可以去下面链接去下载(网上找到的关于兔子的例子都是在下面链接中下载的),不过下载的是ply文件,需要转为pcd文件,转换方法在下一篇文章会说明。

The Stanford 3D Scanning Repository

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【五:Httprunner的介绍使用】

接口自动化框架封装思想的建立。httprunner&#xff08;热加载&#xff1a;动态参数&#xff09;&#xff0c;去应用 意义不大。 day1 一、什么是Httprunner? 1.httprunner是一个面向http协议的通用测试框架&#xff0c;目前最新的版本3.X。以前比较流行的 2.X的版本。2.它的…

pytorch 入门 (三)案例一:mnist手写数字识别

本文为&#x1f517;小白入门Pytorch内部限免文章 &#x1f368; 本文为&#x1f517;小白入门Pytorch中的学习记录博客&#x1f366; 参考文章&#xff1a;【小白入门Pytorch】mnist手写数字识别&#x1f356; 原作者&#xff1a;K同学啊 目录 一、 前期准备1. 设置GPU2. 导入…

基于主动移频法与AFD孤岛检测的单相并网逆变器仿真(Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

二、vue基础语法

一、模板语法 1、文本渲染 使用双花括号语法插入文本 <template><div><h3>msg: {{ message }}</h3></div> </template><script> export default {data() {return {message: "输出信息"}} } </script><style s…

成集云 | 思迅商慧集成用友T | 解决方案

源系统成集云目标系统 方案介绍 思迅商慧是一款集批次成本、配送复核、自助收银、供应链、加盟管理等于一身的零售管理软件。可以帮助解决客户的运营和管理难题&#xff0c;包括加盟店管理、供应商管理、配送复核管理、商品经营维护、自助收银系统等。 用友T是一款…

Node.js在Python中的应用实例解析

随着互联网的发展&#xff0c;数据爬取成为了获取信息的重要手段。本文将以豆瓣网为案例&#xff0c;通过技术问答的方式&#xff0c;介绍如何使用Node.js在Python中实现数据爬取&#xff0c;并提供详细的实现代码过程。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境…

Flutter——最详细(CustomScrollView)使用教程

CustomScrollView简介 创建一个 [ScrollView]&#xff0c;该视图使用薄片创建自定义滚动效果。 [SliverList]&#xff0c;这是一个显示线性子项列表的银子列表。 [SliverFixedExtentList]&#xff0c;这是一种更高效的薄片&#xff0c;它显示沿滚动轴具有相同范围的子级的线性列…

JavaScript爬虫程序实现自动化爬取tiktok数据教程

以下是一个使用 request-promise 和 JavaScript 的爬虫程序&#xff0c;用于爬取tiktok的内容。此程序使用了 https://www.duoip.cn/get_proxy 这段代码。 // 引入 request-promise 库 const rp require(request-promise);// 定义 get\_proxy 函数 function get_proxy() {retu…

家装、家居两不误,VR全景打造沉浸式家装体验

当下&#xff0c;用户对生活品质要求日益提升&#xff0c;越来越多的用户对多功能家装用品需求较大&#xff0c;由此造就了VR全景家装开始盛行。VR全景家装打破传统二维空间模式&#xff0c;通过视觉、交互等功能让用户更加真实、直观的体验和感受家居布置的效果。 一般来说&am…

基于PHP的蛋糕甜品商店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

pytest利用request fixture实现个性化测试需求详解

这篇文章主要为大家详细介绍了pytest如何利用request fixture实现个性化测试需求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下− 前言 在深入理解 pytest-repeat 插件的工作原理这篇文章中&#xff0c;我们看到pytest_repeat源码中有这样一段 import pyt…

深拷贝和浅拷贝

一、深浅拷贝是什么&#xff1f; 首先我们要明白一点&#xff0c;js中数据类型分为&#xff1a; 基本数据类型: Number, String, Boolean, Null, Undefined, Symbol 引用数据类型: Object &#xff0c;Array , Function 对于引用数据 类型才有深浅拷贝的说法 1. 浅拷贝&…

An Embarrassingly Easy but Strong Baseline for Nested Named Entity Recognition

原文链接&#xff1a; https://aclanthology.org/2023.acl-short.123.pdf ACL 2023 介绍 问题 基于span来解决嵌套ner任务的范式&#xff0c;大多都是先对span进行枚举&#xff0c;然后对每个span进行分类&#xff0c;实际就是得到一个分数矩阵&#xff0c;矩阵中每个元素表示一…

书单|1024程序员狂欢节充能书单!

点击链接进入图书专题 1024程序员节 “IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台&#xff0c;致力于帮助读者在广义的IT领域里&#xff0c;掌握更专业、更实用的知识与技能&#xff0c;快速提升职场竞争力。 点击蓝色微信名可快速关注我们。 一年一度的1024程序员…

Python---循环---while循环

Python中的循环 包括 while循环与for循环&#xff0c;本文以while循环为主。 Python中所有的知识点&#xff0c;都是为了解决某个问题诞生的&#xff0c;就好比中文的汉字&#xff0c;每个汉字都是为了解决某种意思表达而诞生的。 1、什么是循环 现实生活中&#xff0c;也有…

Flink 的集群资源管理

集群资源管理 一、ResourceManager 概述 1、ResourceManager 作为统一的集群资源管理器&#xff0c;用于管理整个集群的计算资源&#xff0c;包括 CPU资源、内存资源等。 2、ResourceManager 负责向集群资源管理器申请容器资源启动TaskManager实例&#xff0c;并对TaskManag…

Unity DOTS System与SystemGroup概述

最近DOTS终于发布了正式的版本, 我们来分享以下DOTS里面System关键概念&#xff0c;方便大家上手学习掌握Unity DOTS开发。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; System是迭代计算与处理World中的…

ASEMI肖特基二极管MBR10100CT参数,MBR10100CT封装

编辑-Z MBR10100CT参数描述&#xff1a; 型号&#xff1a;MBR10100CT 最大重复峰值反向电压VRRM&#xff1a;100V 最大RMS电压VRMS&#xff1a;70V 最大直流阻断电压VDC&#xff1a;100V 最大平均正向电流IF&#xff1a;10A 峰值正向浪涌电流IFSM&#xff1a;150A 最大…

JAVA发送消息到RabbitMq

项目中&#xff0c;作为生产者自定义消息发送到RabbitMq。 1.引入rmq依赖 <!-- rabbitmq 依赖 --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.9.0</version></dependen…

【C++】vector

vector基本介绍 1. vector 表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c; vector 也采用的连续存储空间来存储元素。也就是意味着可以采用下标对 vector 的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#x…