PyQt5:构建目标检测算法GUI界面 (附python代码)

news2024/11/18 11:17:12

文章目录

  • 1.界面
  • 2.代码
  • 3.Analyze

1.界面

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

最简单的情况,我们需要一个按钮读取图片,然后后有一个地方显示图片。

在这里插入图片描述

2.代码

import sys
import numpy as np
from PIL import Image

from PyQt5.QtGui import QImage, QPixmap, QIcon, QColor
from PyQt5.QtCore import pyqtSlot, QSize, Qt
from PyQt5.QtWidgets import QApplication, QTextBrowser, QWidget, QLabel, QPushButton, QFileDialog, QFrame


class 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 = 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")

        self.show()

    #-----------------------------#
    #   打开图片模式
    #-----------------------------#
    @pyqtSlot()
    def openimage(self):
        imgName, _ = QFileDialog.getOpenFileName(self, "打开图片", "", "Images (*.jpg, *.png);;All Files(*)")
        if len(imgName)==0:
            return
        show = 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_())

3.Analyze

1、窗口构建
a、按钮:获取图片
b、Inputs、Outputs文本提示
c、Inputs、Outputs图片显示
d、箭头显示
e、整点祝福
2、主程序运行


欢迎在评论区讨论本文或与博主私聊,欢迎点赞收藏评论三连。

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

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

相关文章

问题 C: 搬寝室(DP)

算法分析: 题目意思为求n个物品,拿k对使得消耗的体力最少, 或者说是这k对物品,每一对中两件物品的质量差平方最小, 所以要使得质量差的平方小,只能排序后取质量相邻两个物品作为一对; 现在设f…

Leetcode刷题笔记--Hot91--100

1--汉明距离&#xff08;461&#xff09; 主要思路&#xff1a; 按位异或&#xff0c;统计1的个数&#xff1b; #include <iostream> #include <vector>class Solution { public:int hammingDistance(int x, int y) {int z x ^ y; // 按位异或int res 0;while(…

行情分析——加密货币市场大盘走势(10.31)

目前大饼依然在33000-36000这个位置震荡&#xff0c;需要等待指标修复&#xff0c;策略就是逢低做多&#xff0c;做短线。最近白天下跌&#xff0c;晚上涨回来&#xff0c;可以小仓位入场多单&#xff0c;晚上离场下车。 以太同样是震荡行情&#xff0c;看下来以太目前在补涨&a…

virtual 关键字中 cv限定符的使用

对于如下定义&#xff1a; struct A { virtual int f( ) { return 1; } } a; struct B: A {int f( ) const { return 2; }int f( ) volatile { return 3; }int f( ) const volatile { return 4; } } c; int main(int argc, char *argv[ ]) { A *p&c; return p->f( ); } …

公共字段自动填充、菜品管理

一、公共字段填充 1.1、问题分析 1.2、实现思路 1.3、代码开发 1.3.1、自定义注解 import com.sky.enumeration.OperationType;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import jav…

88 每日温度

每日温度 理解为什么用栈&#xff1a;一种在连续数据里的局部关系&#xff0c;这道题体现在temp[0]只和第一个比它大的值下标有关题解1 逆波兰栈改进(单调栈) 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 a…

【代码随想录03】哈希总结

哈希算法总结&#xff0c;拿去吧&#xff01;留下个赞

1-1 暴力破解-枚举

枚举&#xff1a;枚举所有的情况&#xff0c;逐个判断是否是问题的解 判断题目是否可以使用枚举&#xff1a;估算算法复杂度 1秒计算机大约能处理107的数据量&#xff0c;即O(n)107&#xff0c;则O(n2)能处理的数据量就是根号107≈3162 复杂度对应的数据量是该算法能处理的最…

SpringBoot2.7.17整合redis7

需要的依赖库&#xff1a; <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</gro…

0基础学习PyFlink——个数滑动窗口(Sliding Count Windows)

大纲 滑动&#xff08;Sliding&#xff09;和滚动&#xff08;Tumbling&#xff09;的区别样例窗口为2&#xff0c;滑动距离为1窗口为3&#xff0c;滑动距离为1窗口为3&#xff0c;滑动距离为2窗口为3&#xff0c;滑动距离为3 完整代码参考资料 在 《0基础学习PyFlink——个数…

电源控制系统架构(PCSA)之电源控制框架

安全之安全(security)博客目录导读 PCSA的主要目的是描述SoC系统电源控制集成的标准方法。这种方法的一个关键组成部分是电源控制框架。下图显示了电源控制框架概念的高级说明。 电源控制框架是标准基础设施组件、接口和相关方法的集合&#xff0c;可用于构建SoC电源管理所需的…

【Java初阶练习题】-- 循环练习题

循环练习题 1. 根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)2. 判定一个数字是否是素数3. 打印 1 - 100 之间所有的素数4. 输出 1000 - 2000 之间所有的闰年5. 输出乘法口诀表6. 求两个正整数的最大公约数7. 求出0&#xff5e;999之…

滚动条默认是隐藏的只有鼠标移上去才会显示

效果 在设置滚动条的类名中写 /* 滚动条样式 */.content-box::-webkit-scrollbar {width: 0px; /* 设置纵轴&#xff08;y轴&#xff09;轴滚动条 */height: 0px; /* 设置横轴&#xff08;x轴&#xff09;轴滚动条 */}/* 滚动条滑块&#xff08;里面小方块&#xff09; */.…

Bellman-ford 贝尔曼-福特算法

Bellman-ford算法可以解决负权图的单源最短路径问题 --- 它的优点是可以解决有负权边的单源最短路径问题&#xff0c;而且可以判断是否负权回路 它也有明显的缺点&#xff0c;它的时间复杂度O&#xff08;N*E&#xff09;&#xff08;N是点数 &#xff0c; E是边数&#xff09…

实现多平台兼容性:开发同城外卖小程序的技术策略

在移动互联网时代&#xff0c;外卖行业的快速崛起改变了人们点餐的方式。随着小程序的兴起&#xff0c;开发同城外卖小程序成为了许多企业的重要战略。然而&#xff0c;小程序的多平台兼容性成为了一项关键挑战。本文将探讨如何实现多平台兼容性&#xff0c;以开发高效且用户友…

LeetCode 2402.会议室III ----堆+模拟

5e5 的st与ed 容易看出来是用堆来写的一道题目&#xff0c;一开始我只用了一个堆&#xff0c;出现了问题 问题就是当我们当前这个会议有多个可以选择的会议室可以选择的时候不一定选择那个最先结束的会议室而是应该选择可以选择的那些里面编号最小的那一个&#xff0c;因此我们…

ConfigurationProperties之宽松绑定

前面我们讲了ConfigurationProperties 但这个东西只能匹配小写 我这样写就正常 但当我们将配置文件和属性类都改成大写时 配置文件一切正常 但ConfigurationProperties就开始报错了 这涉及到一个知识点 宽松绑定 也叫做 松散绑定 其实 ConfigurationProperties提供给我们了…

Python 数学函数和 math 模块指南

Python 提供了一组内置的数学函数&#xff0c;包括一个广泛的数学模块&#xff0c;可以让您对数字执行数学任务。 内置数学函数。min() 和 max() 函数可用于在可迭代对象中查找最低或最高值&#xff1a; 示例&#xff1a;查找可迭代对象中的最低或最高值&#xff1a; x min…

深入理解udp

1.再谈端口号 1.1复习 我们上一篇谈了很久的应用层的http&#xff0c;并在此前我们使用socket编程写了一个能相互通信的客户端与服务端&#xff0c;但是我们也只是粗略的理解了一下tcp和udp在编程过程中所形成的差异性&#xff0c;并没有实质去了解一下其详细内容&#xff0c;…

KNN模型

使用K-Nearest Neighbors (KNN)算法进行分类。首先加载一个数据集&#xff0c;然后进行预处理&#xff0c;选择最佳的K值&#xff0c;并训练一个KNN模型。 # encodingutf-8 import numpy as np datas np.loadtxt(datingTestSet2.txt) # 加载数据集&#xff0c;返回一个numpy数…