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文件越来越多,有的时候在网上下载的PDF文件打开之后,发现选中文字之后无法复制。甚至其他功能也都无法使用,这是怎么回事?该怎么办? 当我们发现文件打开之后,编辑功能无法使用,很…...
vim程序编辑器
最近读书读完感觉没有读一样,所以决定写笔记记录下 vi的使用包括三种模式 一般模式 编辑模式 a,i,o,r,A,I,O,R 用来插入或者替换内容 命令行模式 :wq保存退出:wq!强制保存退出…...
新手如何学习挖漏洞?看这篇就够了【网络安全】
什么是漏洞挖掘 漏洞挖掘是指通过分析软件、系统或网络中存在的安全漏洞来发现并利用这些漏洞。漏洞挖掘是信息安全领域的一项重要工作,可以帮助企业和组织提高系统的安全性,避免黑客攻击和数据泄露。 漏洞挖掘的流程一般可以概括为以下几个步骤&#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 基础 …...
成都瀚网科技有限公司抖音小店:创新营销引领电商潮流
在当今数字化时代,抖音作为一款备受欢迎的短视频平台,不仅吸引了大量用户的关注,还为众多电商企业提供了新的销售渠道。成都瀚网科技有限公司抖音小店便是其中之一,凭借其独特的营销策略和优质的产品,成为了抖音电商领…...
警惕!又2本期刊被“On Hold”!
【SciencePub学术】 此前,继一本SSCI期刊被取消“On hold”标识后,仍处于“On Hold”状态的期刊有6本,其中包括4本SCI期刊和2本ESCI期刊。近日,经小编查询,又新增2本“On Hold”期刊,详情如下:…...
一台服务器成了哆啦A梦的神奇口袋
如果我有一台服务器,那简直就像打开了哆啦A梦的神奇口袋!可以做的事情可太多啦,比如: 学习和探险 首先嘛,当然是用来学习和探险啦!我可以安装和配置各种操作系统、编程语言和工具,深入了解计…...
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 表情不支持,报错 Database Query Error Emoji 表情 Emoji 就是表情符号,…...
【C#】委托与事件
目录 一、委托 1.什么是委托 2.委托类型的声明与初始化 3.委托类型引用方法的调用 4.使用委托类型作为方法的参数 5.Action委托 6.Func委托 7.通用类型冒泡排序 8.多播委托 二、Lambda表达式 1.匿名方法 2.Lambda表达式表示匿名方法 三、事件 1.什么是事件 2.事件…...
化工园区数字孪生可视化管控平台,赋予园区安全环保智慧发展
化工行业作为国民经济的支柱和工业发展的引擎,对安全生产、环保节能、应急管控有着很高的要求。目前国内外化工园区面临安全和环保两大压力。为有效解决这两大难题,巨蟹数科综合运用物联网、数字孪生等新一代信息技术,建设了数字孪生园区智慧…...
Laplacian算子详解及例程
Laplacian算子是一种常用的边缘检测算法,它是通过对图像进行二阶微分来检测图像的边缘。Laplacian算子的优点是能够对不同方向的边缘进行检测,对于边缘的粗细和强度变化也比较敏感。 Laplacian算子的计算公式为: ∇f ∂f/∂x ∂f/∂y其中…...
《数据结构与算法》学习指导手册
我觉得,对于初学者来说,先把最简单、最基础、最重要的知识点掌握好,再去研究难度较高、更加高级的知识点,这样由易到难、循序渐进的学习路径,无疑是最合理的。 这里有每个知识点的难易程度、需要你掌握到什么程度、具…...
ubuntu安装配置mantis
目录 前言安装Apache2安装PHP安装数据库mariadbmariadb安装MariaDB重置密码为MantisBT创建数据库和用户 phpmyadmin安装和配置安装phpmyadmin查看安装内容配置phpmyadmin1.phpmyadmin apache配置文件2.为phpmyadmin创建数据库和用户3.修改配置文件config-db.php4.重新运行 管理…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
