Qt中通过QLabel实时显示图像

      Qt中的QLabel控件用于显示文本或图像,不提供用户交互功能。以下测试代码用于从内置摄像头获取图像并实时显示:

      Widgets_Test.h:

class Widgets_Test : public QMainWindow
{Q_OBJECTpublic:Widgets_Test(QWidget *parent = nullptr);~Widgets_Test();private slots:void start_capture();void close_caputre();void update_frame(const QImage& image);private:void capture();Ui::Widgets_TestClass ui_;std::thread capture_thread_{};std::atomic<bool> is_running_{ false };
};

      Widgets_Test.cpp:

Widgets_Test::Widgets_Test(QWidget *parent): QMainWindow(parent)
{ui_.setupUi(this);connect(ui_.button_close, &QPushButton::clicked, this, &Widgets_Test::close);connect(ui_.open_camera, &QPushButton::clicked, this, &Widgets_Test::start_capture);connect(ui_.close_camera, &QPushButton::clicked, this, & Widgets_Test::close_caputre);connect(ui_.open_camera, &QPushButton::clicked, this, [this] {ui_.button_close->setEnabled(false);});connect(ui_.close_camera, &QPushButton::clicked, this, [this] {ui_.button_close->setEnabled(true);});
}Widgets_Test::~Widgets_Test()
{}void Widgets_Test::start_capture()
{is_running_.store(true);capture_thread_ = std::thread([this] {this->capture();});
}void Widgets_Test::capture()
{cv::VideoCapture cap(0);if (!cap.isOpened()) {qWarning("failed to open camera"); // QMetaObject::invokeMethod, UI操作必须在主线程中执行emit ui_.close_camera->clicked();return;}auto w1 = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_WIDTH));auto h1 = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_HEIGHT));auto w2 = ui_.label_show->width();auto h2 = ui_.label_show->height();qDebug() << w1 << "," << h1 << "," << w2 << "," << h2;cv::Mat frame{}, rgb{};QImage image{}, img_copy{};while (is_running_.load()) {cap >> frame;if (frame.empty())continue;cv::cvtColor(frame, rgb, cv::COLOR_BGR2RGB);cv::resize(rgb, rgb, cv::Size(w2, h2));image = QImage(rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_RGB888);img_copy = image.copy();QMetaObject::invokeMethod(this, "update_frame", Qt::QueuedConnection, Q_ARG(QImage, img_copy));std::this_thread::sleep_for(std::chrono::milliseconds(10));}
}void Widgets_Test::update_frame(const QImage& image)
{ui_.label_show->setPixmap(QPixmap::fromImage(image));
}void Widgets_Test::close_caputre()
{is_running_.store(false);if (capture_thread_.joinable())capture_thread_.join();
}

      说明

      1. 在子线程中获取摄像头每帧数据:

      (1).因为QLabel中接收数据的类型为QImage,这里需要将cv::Mat转换为QImage。

      (2).通过QMetaObject::invokeMethod函数调用对象上的信号或槽函数,支持跨线程调用。这里使用此函数将子线程获取到的图像数据传给主线程上的QLabel控件。使用Qt::QueuedConnection,跨线程异步调用。

      2.UI操作必须在主线程中执行

      (1).主线程中通过QLabel的setPixmap函数显示图像。

      3.点击"open camera",开始打开摄像头采集显示图像;点击"close camera",关闭摄像头。

      执行结果如下图所示:

      GitHub:https://github.com/fengbingchun/Qt_Test

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

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

相关文章

缓存监控治理在游戏业务的实践和探索

作者&#xff1a;来自 vivo 互联网服务器团队- Wang Zhi 通过对 Redis 和 Caffeine 的缓存监控快速发现和定位问题降低故障的影响面。 一、缓存监控的背景 游戏业务中存在大量的高频请求尤其是对热门游戏而言&#xff0c;而应对高并发场景缓存是一个常见且有效的手段。 游戏业…

城市街拍人像自拍电影风格Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 城市街拍人像自拍的电影风格 Lr 调色&#xff0c;是利用 Adobe Lightroom 软件&#xff0c;对在城市街景中拍摄的人像自拍照片进行后期处理&#xff0c;使其呈现出电影画面般独特的视觉质感与艺术氛围。通过一系列调色操作&#xff0c;改变照片的色彩、明暗、对比等元…

爬虫案例-爬取某站视频

文章目录 1、下载FFmpeg2、爬取代码3、效果图 1、下载FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。 点击下载: ffmpeg 安装并配置 FFmpeg 步骤&#xff1a; 1.下载 FFmpeg&#xff1a; 2.访问 FFmpeg 官网。 3.选择 Wi…

LeetCode热题100精讲——Top3:最长连续序列【哈希】

你好&#xff0c;我是安然无虞。 文章目录 题目背景最长连续序列C解法Python解法 题目背景 如果大家对于 哈希 类型的概念并不熟悉, 可以先看我之前为此专门写的算法详解: 蓝桥杯算法竞赛系列第九章巧解哈希题&#xff0c;用这3种数据类型足矣 最长连续序列 题目链接&#x…

pyecharts在jupyter notebook中不能够渲染图表问题。

在使用jupyter notebook中使用pyecharts绘制可视化图表的时候,发现图表不能渲染到页面中,生成的html是没问题的,本文主要解决在jupyter notebook中不能渲染这个问题。 1、原因分析 2、解决办法 如果是使用的虚拟环境,需要下你提前激活虚拟环境,再进行下列操作。 因为需要…

使用python numpy计算并显示音频数据的频谱信息

一 概念 最近需要用到这个数据。笔者需要&#xff0c;使用 Python 的numpy库结合scipy和matplotlib库来计算并显示音频数据频谱信息的示例代码。我们将使用scipy.io.wavfile来读取音频文件&#xff0c;numpy进行快速傅里叶变换&#xff08;FFT&#xff09;计算频谱&#xff0…

算法刷题整理合集(七)·【算法赛】

本篇博客旨在记录自已的算法刷题练习成长&#xff0c;里面注有详细的代码注释以及和个人的思路想法&#xff0c;希望可以给同道之人些许帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误或遗漏之处&#xff0c;望各位可以在评论区指正出来&#xf…

[免费]SpringBoot+Vue城市交通管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue城市交通管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue城市交通管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 城市交通管理系统的目的是让使用者可以更方便的将…

同旺科技USB to I2C 适配器 ---- 指令循环发送功能

所需设备&#xff1a; 内附链接 1、同旺科技USB to I2C 适配器 1、周期性的指令一次输入&#xff0c;即可以使用 “单次发送” 功能&#xff0c;也可以使用 “循环发送” 功能&#xff0c;大大减轻发送指令的编辑效率&#xff1b; 2、 “单次发送” 功能&#xff0c;“发送数据…

SQL Server——表数据的插入、修改和删除

目录 一、引言 二、表数据的插入、修改和删除 &#xff08;一&#xff09;方法一&#xff1a;在SSMS控制台上进行操作 1.向表中添加数据 2.对表中的数据进行修改 3.对表中的数据进行删除 &#xff08;二&#xff09;方法二&#xff1a;使用 SQL 代码进行操作 1.向表中添…

【MySQL】存储过程

目录 基本概念存储过程操作定义存储过程变量定义局部变量用户变量系统变量全局变量会话变量 参数传递in 关键字out 关键字inout 关键字 流程控制判断分支语句 if分支语句 case 循环循环语句 while循环语句 repeat循环语句 loop 游标异常处理 存储函数 基本概念 概述 MySQL 5.…

大数据学习(77)-Hive详解

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…

一种很新的“工厂”打开方式---智慧工厂

随着信息技术的不断进步&#xff0c;特别是数字化、网络化、智能化技术的快速发展&#xff0c;传统的工厂管理模式已经难以满足现代企业对于生产效率、安全管理以及决策支持等方面的需求&#xff0c;智能制造已成为全球制造业发展的主流趋势。 由于工厂实时数据的多样性、复杂性…

基于python的租房数据分析系统(爬虫爬取真实数据)

项目介绍 本租房数据分析系统具备创新爬虫功能&#xff0c;能从安居客实时抓取房屋信息&#xff0c;同时提供全面的用户管理、个人中心服务。系统支持房屋信息的新增、修改、删除、查询及用户评论&#xff0c;以及租房数据的全面管理分析。此外&#xff0c;房屋资讯管理和轮播图…

Java——ArrayList集合

ArrayList&#xff1a;基于动态数组实现&#xff0c;支持随机访问&#xff0c;适合频繁的随机访问操作&#xff0c;但在插入和删除元素时性能较差。 技术层面介绍 所属类库&#xff1a;ArrayList 位于 java.util 包中&#xff0c;它实现了 List 接口&#xff0c;因此具备 Lis…

【Linux】线程库

一、线程库管理 tid其实是一个地址 void* start(void* args) {const char* name (const char *)args;while(true){printf("我是新线程 %s &#xff0c;我的地址&#xff1a;0x%lx\n",name,pthread_self());sleep(1);}return nullptr; }int main() {pthread_t tid…

智能宠物饮水机WTL580微波雷达感应模块方案;便捷管理宠物饮水

一&#xff1a;宠物智能饮水与技术创新 1&#xff1a;非接触式感应 微波雷达模块实时检测宠物靠近行为&#xff0c;当宠物进入感应范围时&#xff0c;饮水机自动启动水泵&#xff0c;提供新鲜水流 2&#xff1a;多模式配置 感应距离&#xff1a;30-150cm可调&#xff0c;适应…

How to share files with Windows via samba in Linux mint 22

概述 Windows是大家日常使用最多的操作系统&#xff0c;在Windows主机之间&#xff0c;可以共享文件&#xff0c;那么如何在Windows主机与Linux主机之间共享文件呢&#xff1f; 要在Windows主机与Linux主机之间共享文件&#xff0c;我们可以借助Samba协议完成。借助Samba协议…

牛客周赛84 题解 Java ABCDE 仅供参考

A 小苯跑外卖 除一下看有没有余数 有余数得多一天 没余数正好 // github https://github.com/Dddddduo // github https://github.com/Dddddduo/acm-java-algorithm // github https://github.com/Dddddduo/Dduo-mini-data_structure import java.util.*; import java.io.*…

基于SpringBoot + Vue 的图书馆座位预约系统

SpringBoot 图书馆座位预约管理系统 自习室座位预约管理系统 javaSpringbootVUEredis 1. 开发环境&#xff1a; idea/eclipse、jdk1.8、maven、nodejs 2. 技术栈&#xff1a;java、springboot、Redis、mybatis、vue 3. 数据库&#xff1a; MySQL 有用户和管理员两个角色…