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

news2025/1/23 15:10:11

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

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

先拖出来一个QOpenGLWidget控件

修改布局如下:

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

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

 输入提升的类名称为QVTKOpenGLNativeWidget

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

点击【添加】按钮。

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

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

INCLUDEPATH += /usr/include/eigen3

INCLUDEPATH += /usr/local/include/vtk-8.2
LIBS += /usr/local/lib/libvtk*.so

INCLUDEPATH += /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.coloradmin.cn/o/1101974.html

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

相关文章

Linux系统下的shell外壳

往期回顾: ⭐Linux系统常用指令(一) ⭐Linux系统常用指令(二) ⭐Linux系统常用指令(三) ⭐Linux系统常用指令(完) 本篇文章我们来深挖Linux的知识! Linux严格意义上说的是一个操作系统&#xff0c;我们称之为“核心&#xff08;kernel&#xff09; “ &#xff0c;但我们一般用…

技术路线决定出海方向:中国车企的全球市场密码

摘要&#xff1a;面对全球化的挑战,中国汽车企业站在了一个十字路口:选择大众市场还是豪华市场?背后涉及的不仅是消费者的购车偏好,更有技术路线和产业链的深层次支撑。从丰田的Prius到宝马的驾驶乐趣&#xff0c;不同的市场策略背后隐藏着怎样的全球化密码? 随着全球化浪潮的…

网络库OKHTTP(3)拦截器扩展,一个好用的网络请求监控工具Chuck

序、慢慢来才是最快的方法。 场景一 明明是服务端的接口数据错误&#xff0c;而QA&#xff08;测试&#xff09;第一个找到的可能是客户端开发的你&#xff0c;为什么这个页面出现错误了&#xff1f; 而作为客户端开发的你&#xff0c;可能要拿出测试机连上电脑&#xff0c;打…

ftp服务开启——windows

一、打开服务 1、打开控制面板——》选中程序和功能 2、 选择启用或关闭windows功能 3、全选FTP服务器&#xff0c;web管理工具里面的IIS管理控制台&#xff0c;一个都不能漏 4、全选 万维网服务下面的安全性的所有选项&#xff0c;最后点击确定 二、 IIS 配置 1、windows的…

如何使用ai去水印?用这款就够了

AI在图像处理领域的不断成熟确实为我们提供了更多便利和高效率的工具&#xff0c;使得图像处理变得更加便捷&#xff0c;尤其是AI去水印技术&#xff0c;它可以轻松去除图片中的各种杂质&#xff0c;包括水印、文字、标志、物体、以及其他杂乱的干扰元素&#xff0c;有效提高了…

SSM - Springboot - MyBatis-Plus 全栈体系(三十一)

第七章 MyBatis-Plus 二、MyBatis-Plus 核心功能 1. 基于 Mapper 接口 CRUD 通用 CRUD 封装 BaseMapper (opens new window)接口&#xff0c; Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器! 内部包含常见的单表操作&#xff01; 1.1 Insert 方…

LoongArch 指令集设计——单周期5条指令exp5

对应实验手册请参阅《LoongArch CPU设计实验》。 NOTE: minicpu_env/miniCPU/目录下的代码功能不全&#xff0c;是有意为之&#xff0c;无需提issue修正。mycpu_env/myCPU/目录下的代码有功能错误&#xff0c;亦是有意为之&#xff0c;无需提issue修正。 实验安排简介 // dc…

E053-web安全应用-Brute force暴力破解初级

课程分类&#xff1a; web安全应用 实验等级: 中级 任务场景: 【任务场景】 小王接到磐石公司的邀请&#xff0c;对该公司旗下的网站进行安全检测&#xff0c;经过一番检查发现该论坛的后台登录页面上可能存在万能密码漏洞&#xff0c;导致不知道账号密码也能登录后台&am…

Windows消息 队列

1、 Windows消息机制 Windows是一个消息驱动的操作系统&#xff0c;消息是用一个常量标识符来标记&#xff0c;并且有两个32Bit的消息附加信息。单击鼠标、敲击键盘&#xff0c;都会通过电脑外设向系统发送特定的中断信号&#xff0c;这个中断信息在操作系统中会转化为一个消息…

leetcode每日一题复盘(10.16~10.22)

leetcode 501 二叉搜素树中的众数 对二叉搜索树的性质还不是很熟悉,不懂得利用其性质,做题没有方法论,这是暴露出来的问题,明天重做一下98,530,501这三个题,再进行总结

33 机器学习(一):特征工程

文章目录 机器学习需要用到的包的介绍机器学习做什么深度学习做什么常见的概念 数据介绍数据类型数据的来源数据的构成 特征工程one-hot编码接口集特征提取DictVectorizerCountVectorizerTfidfVectorizer 特征处理归一化 MinMaxScaler标准化 StandardScaler标准化和归一化的对比…

mmdetection及mmengine源码结构

python中的装饰函数 所谓的函数修饰符&#xff0c;就是在函数外面再套一层函数&#xff0c; 装饰函数可以接受不同的参数类型的函数传入&#xff0c;对其进行装饰加工&#xff1b; 在需要装饰的函数前面装饰函数即可&#xff1b; 这样子做的好处在于代码的复用&#xff0c;比…

使用interrupt()中断线程

示例一 : public class Test01 extends Thread {Overridepublic void run() {while (true) {}}public static void main(String[] args) {Test01 t new Test01();t.start();try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.prin…

家用洗地机哪个牌子最好用?质量最好的洗地机推荐

提到家务清洁&#xff0c;相信应该是很多宝妈头疼的事儿&#xff0c;不仅工作量打&#xff0c;耗时又耗力&#xff0c;拥有一款完美的清洁工具&#xff0c;那讲大大的提升幸福指数&#xff0c;而洗地机便是当下的智能清洁神器之一。那么家用洗地机哪个牌子最好用&#xff0c;质…

竞赛 深度学习YOLO图像视频足球和人体检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov5算法5 数据集6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习YOLO图像视频足球和人体检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非…

使用Nginx实现采集端和数据分析平台的数据加密传输

1. 需求描述 目前鸿鹄暴露出来的重要ports如下表&#xff1a; 在实际的生产环境中&#xff0c;结合我司的使用场景&#xff0c;需要在鸿鹄前端安装proxy&#xff0c;用以解决如下两个问题&#xff1a; 1.1 实现http到https的强制跳转 企业环境中&#xff0c;一般会关闭http 80端…

精准定位——MySQL日志学习的一天【错误、二进制、查询、慢查询】

MySQL 日志是记录 MySQL 数据库服务器运行过程中的各种活动和事件的文件。它们对于监控、故障排查、性能优化和数据恢复等方面都非常重要。 回顾一下Linux中查看文件的指令操作 cat 命令&#xff1a; cat 命令用于将文件的内容一次性输出到终端。它的主要功能是将文件连接起来…

在全志R128上启用USB ADB以及无线ADB配置方法

首先在FreeRTOS的环境下&#xff0c;选择r128_c906_pro&#xff1a; source envsetup.sh lunch_rtos r128s2_pro_c906USB ADB的配置比较常规&#xff0c;注意以下几个驱动的勾选 usb device驱动adb gadget驱动adbd应用 运行menuconfig&#xff0c;选择对应的驱动以及软件包&…

Docker安装ES7.14和Kibana7.14(无账号密码)

一、Docker安装ES7.14.0 1、下载镜像 docker pull elasticsearch:7.14.0 2、docker安装7.14.0 mkdir -p /usr/local/elasticsearch/config mkdir -p /usr/local/elasticsearch/data chmod 777 -R /usr/local/elasticsearch/ echo "http.host: 0.0.0.0" >> /u…

linux下 u2net tensorrt模型部署

TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速…