当前位置: 首页 > news >正文

PyQt5入门4——给目标检测算法构建一个简单的界面

PyQt5入门4——给目标检测算法构建一个简单的界面

  • 学习前言
  • 要构建怎么样的界面
  • 实例使用
    • 1、窗口构建
      • a、按钮:获取图片
      • b、Inputs、Outputs文本提示
      • c、Inputs、Outputs图片显示
      • d、箭头显示
      • e、整点祝福
    • 2、主程序运行
  • 全部代码

学习前言

搞搞可视化界面哈,虽然不一定有用,但是搞一下。
在这里插入图片描述

要构建怎么样的界面

目标检测算法一般就是检测个图片,然后显示图片结果就可以了。

最简单的情况,我们需要一个按钮读取图片,然后后有一个地方显示图片,就像下面这样子。

这里还没加入目标检测算法,只是搭个架子。
在这里插入图片描述

实例使用

1、窗口构建

a、按钮:获取图片

此处参考PyQt5入门3,使用到QPushButton类。

#-----------------------------#
#   获取图片按钮
#-----------------------------#
self.btn_photo = QPushButton('获取图片', self)
self.btn_photo.setToolTip('点击后从电脑中读取图片')
self.btn_photo.setIcon(QIcon("img/icon/Search.jpeg"))
self.btn_photo.setIconSize(QSize(30, 30))
self.btn_photo.resize(100, 40)
self.btn_photo.move(10, 10)   
self.btn_photo.clicked.connect(self.openimage)

写一下它的回调函数,在后面的Inputs图片处显示。

#-----------------------------#
#   打开图片模式
#-----------------------------#
@pyqtSlot()
def openimage(self):imgName, _ = QFileDialog.getOpenFileName(self, "打开图片", "", "Images (*.jpg, *.png);;All Files(*)")if len(imgName)==0:returnshow        = Image.open(imgName).convert("RGB")show        = show.resize([self.label_w, self.label_h])showImage   = QImage(np.array(show), np.shape(show)[1],  np.shape(show)[0], QImage.Format_RGB888)self.label_show_input.setPixmap(QPixmap.fromImage(showImage))

b、Inputs、Outputs文本提示

此处参考PyQt5入门1,使用到QTextBrowser类。

写两段文字,分别为Inputs和Outputs。

#-----------------------------#
#   写一段话
#   放到10,60
#   拉伸长度为200,30
#-----------------------------#
self.origin_text = QTextBrowser(self)
self.origin_text.setTextColor(QColor(23,32,32))
self.origin_text.move(10, 60)
self.origin_text.resize(200, 30)
self.origin_text.setText("Inputs:")
self.origin_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0)")#-----------------------------#
#   写一段话
#   放到10,60
#   拉伸长度为200,30
#-----------------------------#
self.output_text = QTextBrowser(self)
self.output_text.move(480, 60)
self.output_text.resize(200, 30)
self.output_text.setText("Outputs:")
self.output_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0)")

c、Inputs、Outputs图片显示

此处参考PyQt5入门2,使用到QLabel类。

#-----------------------------#
#   设置显示的图片
#-----------------------------#
self.label_h = 384
self.label_w = 384
self.label_show_input = QLabel(self)
self.label_show_input.move(10, 100)
self.label_show_input.setFixedSize(self.label_w, self.label_h)
self.label_show_input.setText("Inputs!")
self.label_show_input.setStyleSheet("QLabel{background:white;}")
self.label_show_input.setObjectName("Inputs")#-----------------------------#
#   设置显示的图片
#-----------------------------#
self.label_h = 384
self.label_w = 384
self.label_show_camera = QLabel(self)
self.label_show_camera.move(480, 100)
self.label_show_camera.setFixedSize(self.label_w, self.label_h)
self.label_show_camera.setText("Outputs!")
self.label_show_camera.setStyleSheet("QLabel{background:white;}")
self.label_show_camera.setObjectName("Outputs")

d、箭头显示

这里没找到很好的绘画方法,直接用文本的箭头来显示。PyQt5入门1,使用到QTextBrowser类。

#-----------------------------#
#   搞个箭头好看点
#-----------------------------#
self.arrow_text = QTextBrowser(self)
self.arrow_text.move(410, 275)
self.arrow_text.resize(200, 50)
self.arrow_text.setText("→")
self.arrow_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0);font-size:50px")

e、整点祝福

祝你们每天开心。
参考PyQt5入门1,使用到QTextBrowser类。

#-----------------------------#
#   写一段话
#   放到10,500
#   拉伸长度为200,30
#-----------------------------#
self.text_browser = QTextBrowser(self)
self.text_browser.move(10, 500)
self.text_browser.resize(200, 30)
self.text_browser.setText("Happy New Day")
self.text_browser.setStyleSheet("border:none;background-color:rgba(100,255,255,255)")

2、主程序运行

这个是调用上述创建的Example,细节不必纠结,只需要知道这样便可以调用PyQt5即可。

if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

全部代码

import sys
import numpy as np
from PIL import Imagefrom PyQt5.QtGui import QImage, QPixmap, QIcon, QColor
from PyQt5.QtCore import pyqtSlot, QSize, Qt
from PyQt5.QtWidgets import QApplication, QTextBrowser, QWidget, QLabel, QPushButton, QFileDialog, QFrameclass Example(QWidget):def __init__(self):QWidget.__init__(self)#-----------------------------##   界面显示相关内容#-----------------------------#self.initUI()def initUI(self):#-----------------------------##   初始化标题,界面大小#-----------------------------#self.resize(900, 540)self.setWindowTitle('Easy Object Detection GUI')#-----------------------------##   获取图片按钮#-----------------------------#self.btn_photo = QPushButton('获取图片', self)self.btn_photo.setToolTip('点击后从电脑中读取图片')self.btn_photo.setIcon(QIcon("img/icon/Search.jpeg"))self.btn_photo.setIconSize(QSize(30, 30))self.btn_photo.resize(100, 40)self.btn_photo.move(10, 10)   self.btn_photo.clicked.connect(self.openimage)#-----------------------------##   写一段话#   放到10,500#   拉伸长度为200,30#-----------------------------#self.text_browser = QTextBrowser(self)self.text_browser.move(10, 500)self.text_browser.resize(200, 30)self.text_browser.setText("Happy New Day")self.text_browser.setStyleSheet("border:none;background-color:rgba(100,255,255,255)")#-----------------------------##   写一段话#   放到10,60#   拉伸长度为200,30#-----------------------------#self.origin_text = QTextBrowser(self)self.origin_text.setTextColor(QColor(23,32,32))self.origin_text.move(10, 60)self.origin_text.resize(200, 30)self.origin_text.setText("Inputs:")self.origin_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0)")#-----------------------------##   写一段话#   放到10,60#   拉伸长度为200,30#-----------------------------#self.output_text = QTextBrowser(self)self.output_text.move(480, 60)self.output_text.resize(200, 30)self.output_text.setText("Outputs:")self.output_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0)")#-----------------------------##   搞个箭头好看点#-----------------------------#self.arrow_text = QTextBrowser(self)self.arrow_text.move(410, 275)self.arrow_text.resize(200, 50)self.arrow_text.setText("→")self.arrow_text.setStyleSheet("border:none;background-color:rgba(0,0,0,0);font-size:50px")#-----------------------------##   设置显示的图片#-----------------------------#self.label_h = 384self.label_w = 384self.label_show_input = QLabel(self)self.label_show_input.move(10, 100)self.label_show_input.setFixedSize(self.label_w, self.label_h)self.label_show_input.setText("Inputs!")self.label_show_input.setStyleSheet("QLabel{background:white;}")self.label_show_input.setObjectName("Inputs")#-----------------------------##   设置显示的图片#-----------------------------#self.label_h = 384self.label_w = 384self.label_show_camera = QLabel(self)self.label_show_camera.move(480, 100)self.label_show_camera.setFixedSize(self.label_w, self.label_h)self.label_show_camera.setText("Outputs!")self.label_show_camera.setStyleSheet("QLabel{background:white;}")self.label_show_camera.setObjectName("Outputs")self.show()#-----------------------------##   打开图片模式#-----------------------------#@pyqtSlot()def openimage(self):imgName, _ = QFileDialog.getOpenFileName(self, "打开图片", "", "Images (*.jpg, *.png);;All Files(*)")if len(imgName)==0:returnshow        = Image.open(imgName).convert("RGB")show        = show.resize([self.label_w, self.label_h])showImage   = QImage(np.array(show), np.shape(show)[1],  np.shape(show)[0], QImage.Format_RGB888)self.label_show_input.setPixmap(QPixmap.fromImage(showImage))if __name__ == '__main__':app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())

相关文章:

PyQt5入门4——给目标检测算法构建一个简单的界面

PyQt5入门4——给目标检测算法构建一个简单的界面 学习前言要构建怎么样的界面实例使用1、窗口构建a、按钮:获取图片b、Inputs、Outputs文本提示c、Inputs、Outputs图片显示d、箭头显示e、整点祝福 2、主程序运行 全部代码 学习前言 搞搞可视化界面哈,虽…...

Pandas数据分析系列9-数据透视与行列转换

Pandas 数据透视表 当数据量较大时,为了更好的分析数据特征,通常会采用数据透视表。数据透视表是一种对数据进行汇总和分析的工具,通过重新排列和聚合原始数据,可以快速获得更全面的数据洞察。数据透视表在Excel中也是经常使用的一个强大功能,在Pandas模块,其提供了pivot…...

部分背包问题细节(贪心)

有一种情况是,背包可以把金币全部拿走: 如果num小于0则返回值...

windows协议详解之-RPC/SMB/LDAP/LSA/SAM域控协议关系

如果你在windows域控环境中,例如企业的网络中开启wireshark抓包,你一定会遇到一大堆各种各样的协议。不同于互联网服务(大多基于HTTP),为了实现域控中各种各样的服务,windows的域控环境中采用了非常多的协议…...

uniapp中 background-image 设置背景图片不展示问题

有问题 <view class"file-picker__box jsz" tap"jszxszUpload(jsz)"></view>.jsz {background-image: url(../../static/example_drive.png); }解决1 <view class"file-picker__box jsz" :style"{ background-image: url(…...

Elasticsearch打分机制

一 例子 xx搜索引擎,就搜索结果本身而言,xx返回了正确的结果。因为返回的结果中,都包含了搜索的关键字。而我们从逻辑上来看,这一堆广告算是咋回事!这个吐槽是从用户的角度出发的。很显然,返回的结果中,尤其是前几条,有时甚至是前几页,都跟我们想要的结果相差深远! …...

【pdf密码】为什么我的PDF文件不能复制文字?

大家现在接触PDF文件越来越多&#xff0c;有的时候在网上下载的PDF文件打开之后&#xff0c;发现选中文字之后无法复制。甚至其他功能也都无法使用&#xff0c;这是怎么回事&#xff1f;该怎么办&#xff1f; 当我们发现文件打开之后&#xff0c;编辑功能无法使用&#xff0c;很…...

vim程序编辑器

最近读书读完感觉没有读一样&#xff0c;所以决定写笔记记录下 vi的使用包括三种模式 一般模式 编辑模式 a&#xff0c;i&#xff0c;o&#xff0c;r&#xff0c;A,I,O,R 用来插入或者替换内容 命令行模式 &#xff1a;wq保存退出&#xff1a;wq!强制保存退出&#xf…...

新手如何学习挖漏洞?看这篇就够了【网络安全】

什么是漏洞挖掘 漏洞挖掘是指通过分析软件、系统或网络中存在的安全漏洞来发现并利用这些漏洞。漏洞挖掘是信息安全领域的一项重要工作&#xff0c;可以帮助企业和组织提高系统的安全性&#xff0c;避免黑客攻击和数据泄露。 漏洞挖掘的流程一般可以概括为以下几个步骤&#x…...

CentOS 7.8 kubeadm安装 k8s 1.26

CentOS 7.8 kubeadm安装 k8s 1.26 规划 集群 主机名IP地址k8s-master01192.168.200.101k8s-master02192.168.200.102k8s-master03192.168.200.103k8s-node01192.168.200.201k8s-node02192.168.200.202 VIP(虚拟IP) 192.168.200.80 Harbor http://192.168.200.50 基础 …...

成都瀚网科技有限公司抖音小店:创新营销引领电商潮流

在当今数字化时代&#xff0c;抖音作为一款备受欢迎的短视频平台&#xff0c;不仅吸引了大量用户的关注&#xff0c;还为众多电商企业提供了新的销售渠道。成都瀚网科技有限公司抖音小店便是其中之一&#xff0c;凭借其独特的营销策略和优质的产品&#xff0c;成为了抖音电商领…...

警惕!又2本期刊被“On Hold”!

【SciencePub学术】 此前&#xff0c;继一本SSCI期刊被取消“On hold”标识后&#xff0c;仍处于“On Hold”状态的期刊有6本&#xff0c;其中包括4本SCI期刊和2本ESCI期刊。近日&#xff0c;经小编查询&#xff0c;又新增2本“On Hold”期刊&#xff0c;详情如下&#xff1a;…...

一台服务器成了哆啦A梦的神奇口袋

如果我有一台服务器&#xff0c;那简直就像打开了哆啦A梦的神奇口袋&#xff01;可以做的事情可太多啦&#xff0c;比如&#xff1a; 学习和探险 首先嘛&#xff0c;当然是用来学习和探险啦&#xff01;我可以安装和配置各种操作系统、编程语言和工具&#xff0c;深入了解计…...

java 关闭access文件资源后,无法删除文件

复现问题 // 数据库驱动String DRIVER_CLASS "net.ucanaccess.jdbc.UcanaccessDriver";// 数据库连接地址String DB_URL "jdbc:ucanaccess://D/test.mdb";String DB_USER ""; // 数据库用户名称String DB_PASSWORD "";// 数据库用…...

Typecho 添加 Emoji 表情报错「解决方案」

Typecho 添加 Emoji 表情报错 文章目录 Typecho 添加 Emoji 表情报错前言Emoji 表情utf8mb4 与 UTF8 解决方案[1] 数据库编码更改[2] 数据库配置文件更改 前言 Typecho 添加 Emoji 表情不支持&#xff0c;报错 Database Query Error Emoji 表情 Emoji 就是表情符号&#xff0c…...

【C#】委托与事件

目录 一、委托 1.什么是委托 2.委托类型的声明与初始化 3.委托类型引用方法的调用 4.使用委托类型作为方法的参数 5.Action委托 6.Func委托 7.通用类型冒泡排序 8.多播委托 二、Lambda表达式 1.匿名方法 2.Lambda表达式表示匿名方法 三、事件 1.什么是事件 2.事件…...

化工园区数字孪生可视化管控平台,赋予园区安全环保智慧发展

化工行业作为国民经济的支柱和工业发展的引擎&#xff0c;对安全生产、环保节能、应急管控有着很高的要求。目前国内外化工园区面临安全和环保两大压力。为有效解决这两大难题&#xff0c;巨蟹数科综合运用物联网、数字孪生等新一代信息技术&#xff0c;建设了数字孪生园区智慧…...

Laplacian算子详解及例程

Laplacian算子是一种常用的边缘检测算法&#xff0c;它是通过对图像进行二阶微分来检测图像的边缘。Laplacian算子的优点是能够对不同方向的边缘进行检测&#xff0c;对于边缘的粗细和强度变化也比较敏感。 Laplacian算子的计算公式为&#xff1a; ∇f ∂f/∂x ∂f/∂y其中…...

《数据结构与算法》学习指导手册

我觉得&#xff0c;对于初学者来说&#xff0c;先把最简单、最基础、最重要的知识点掌握好&#xff0c;再去研究难度较高、更加高级的知识点&#xff0c;这样由易到难、循序渐进的学习路径&#xff0c;无疑是最合理的。 这里有每个知识点的难易程度、需要你掌握到什么程度、具…...

ubuntu安装配置mantis

目录 前言安装Apache2安装PHP安装数据库mariadbmariadb安装MariaDB重置密码为MantisBT创建数据库和用户 phpmyadmin安装和配置安装phpmyadmin查看安装内容配置phpmyadmin1.phpmyadmin apache配置文件2.为phpmyadmin创建数据库和用户3.修改配置文件config-db.php4.重新运行 管理…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

STL 2迭代器

文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器&#xff1f; 1.迭代器…...

21-Oracle 23 ai-Automatic SQL Plan Management(SPM)

小伙伴们&#xff0c;有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL&#xff0c; 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始&#xff0c;OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...

SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈

【导读】 本文针对无人机&#xff08;UAV&#xff09;视频中目标尺寸小、运动快导致的多目标跟踪难题&#xff0c;提出一种更简单高效的方法。核心创新在于从低置信度检测启动跟踪&#xff08;贴合无人机场景特性&#xff09;&#xff0c;并改进传统外观匹配算法以关联此类检测…...