【PyQt】图像处理系统

@[toc]pyqt实现图像处理系统

图像处理系统

1.创建阴影去除ui文件
2.阴影去除代码

1.创建阴影去除ui文件

UI文件效果图:
在这里插入图片描述

1.1QT Desiger设置组件

1.两个Pushbutton按钮
在这里插入图片描述
在这里插入图片描述

2.两个label来显示图像

在这里插入图片描述
在这里插入图片描述

3.Text Browser来显示输出信息

在这里插入图片描述

1.2布局的设置

1.先不使用任何Layout,把所有控件 按位置 摆放在界面上

2.然后先从 最内层开始 进行控件的 Layout 设定

3.逐步拓展到外层 进行控件的 Layout设定

4.最后调整 layout中控件的大小比例, 优先使用 Layout的 layoutStrentch 属性来控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后设计总体布局

2.阴影去除代码

2.1 加载ui文件

import sysfrom PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import uicclass MyWindow(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):self.ui = uic.loadUi("./shadow_system.ui")print(self.ui.__dict__)  # 查看ui文件中有哪些控件if __name__=="__main__":app = QApplication(sys.argv)w = MyWindow()# 展示窗口w.ui.show()app.exec()

2.2 添加菜单栏

代码:

# 加载好ui文件之后再进行设置菜单栏menu = self.ui.menubarfile_menu = menu.addMenu("文件")file_menu.addAction("新建")file_menu.addAction("打开")file_menu.addAction("保存")edit_menu = menu.addMenu("编辑")edit_menu.addAction("复制")edit_menu.addAction("粘贴")edit_menu.addAction("剪切")

效果图:
在这里插入图片描述

2.3 设置图标

代码:

self.ui.setWindowIcon(QIcon('img.png')) # 设置图标

效果图:
在这里插入图片描述

2.4 标题名称的设置

代码:

self.ui.setWindowTitle("阴影处理系统")  # 修改标题的名称

效果图:

在这里插入图片描述

2.5 查看ui文件中的控件

代码:

 print(self.ui.__dict__)  # 查看ui文件中有哪些控件

print ui文件 dict

{‘centralwidget’: <PyQt5.QtWidgets.QWidget object at 0x000001D4E936EAF0>, ‘verticalLayout’: <PyQt5.QtWidgets.QVBoxLayout object at 0x000001D4E936E0D0>, ‘horizontalLayout’: <PyQt5.QtWidgets.QHBoxLayout object at 0x000001D4E936EB80>, 'pushButton': <PyQt5.QtWidgets.QPushButton object at 0x000001D4E936EC10>, 'pushButton_2': <PyQt5.QtWidgets.QPushButton object at 0x000001D4E9E21AF0>, ‘horizontalLayout_2’: <PyQt5.QtWidgets.QHBoxLayout object at 0x000001D4E9E21C10>, 'label': <PyQt5.QtWidgets.QLabel object at 0x000001D4E9E21CA0>, 'label_2': <PyQt5.QtWidgets.QLabel object at 0x000001D4E9E21D30>, 'textBrowser': <PyQt5.QtWidgets.QTextBrowser object at 0x000001D4E9E21DC0>, ‘menubar’: <PyQt5.QtWidgets.QMenuBar object at 0x000001D4E9E21E50>, ‘statusbar’: <PyQt5.QtWidgets.QStatusBar object at 0x000001D4E9E21EE0>}

2.6 初始化控件

我的习惯是将控件进行初始化,并且备注好,以便后续使用
代码:

self.label = self.ui.label  # label显示出入图像self.label_2 = self.ui.label_2 # 显示输出图像self.pushButton = self.ui.pushButton # 选择图片self.pushButton_2 = self.ui.pushButton_2 # 效果展示self.textBrowser = self.ui.textBrowser # 选择图像的窗口

2.7 按钮与槽

代码:

# 按钮与槽self.pushButton.clicked.connect(self.shadow_code)self.open.triggered.connect(self.open_pic)

2.8 open_pic 函数

代码:

 # 在Qlabel中显示文本def open_pic(self):# 打开文件夹获取文件路径self.dir_path_from, _ = QFileDialog.getOpenFileName(self, "选择文件", "./", "Png(*.png);;Jpg(*.jpg);;All Files(*)")print(self.dir_path_from)  # 得到路径# 添加图片到labelpixmap = QPixmap(f"{self.dir_path_from}")self.label.setPixmap(pixmap)self.label.setScaledContents(True)

功能:
实现打开本地文件夹,并将图像添加到label窗口中

2.9 算法代码调用

代码:

    def shadow_code(self):# 延迟一秒,执行 delayed_functionQTimer.singleShot(1000, self.delayed_function)  # 延时一秒print("延迟1秒")# 执行阴影去除算法def delayed_function(self):self.textBrowser.setPlainText("运行阴影去除算法。。。。。。。。。。。。")self.run_shadow_coda()    # 运行算法文件# 阴影去除算法def run_shadow_coda(self):# 在文本框中输出运行的算法文件self.textBrowser.append(f"运行算法文件:{self.py_shadow_path}")os.system(f"python {self.py_shadow_path}")# 延迟5s,进行输出无阴影图像QTimer.singleShot(5000, self.out_pic)

解释说明:

我所实现的是图像处理系统里面的阴影系统的处理,这里算法并没有采用,只是调用了个简单的py文件进行测试,这里使用了延时操作模拟算法运行过程。

2.10 输出图像

代码:

    def out_pic(self):# 获取输出路径file_name = os.path.basename(self.dir_path_from)  # 文件名+拓展名new_path = os.path.dirname(os.path.dirname(self.dir_path_from))self.new_path_1 = os.path.join(new_path + "/result_file/", file_name)# 将图像放入label中并且自适应缩放图像大小pixmap_2 = QPixmap(f"{self.new_path_1}")self.label_2.setPixmap(pixmap_2)self.label_2.setScaledContents(True)self.textBrowser.append(f"执行完毕,输出图像........")

3 整体展示效果

3.1选择文件

从菜单栏文件中进行选择打开所需要处理的图片,这里的图像支持PNG以及JPG类型。
在这里插入图片描述

3.2算法处理

点击算法处理就可以调用图像处理算法对选择的图像进行图像处理工作。
在这里插入图片描述

3.3 执行完毕效果

在这里插入图片描述

总结

设计了一个简单的图像处理系统,具备QT基本知识,可以用来入门QT,进一步掌握基本的qt软件设计。

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

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

相关文章

【Idea】编译Spring源码 read timeout 问题

Idea现在是大家工作中用的比较多的开发工具&#xff0c;尤其是做java开发的&#xff0c;那么做java开发&#xff0c;了解spring框架源码是提高自己技能水平的一个方式&#xff0c;所以会从spring 官网下载源码&#xff0c;导入到 Idea 工具并编译&#xff0c;但是发现build的时…

Linux 音视频入门到实战专栏(视频篇)视频编解码 MPP

文章目录 一、MPP 介绍二、获取和编译RKMPP库三、视频解码四、视频编码 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2;本篇将介绍如何调用alsa api来进行音频数据的播放和录制。 一、MPP 介绍 瑞芯微提供的媒体处理软件平台…

爬虫后的数据处理与使用(使用篇--实现分类预测)

&#xff08;&#xff09;紧接上文&#xff0c;在完成基本的数据处理后&#xff0c;接下来就是正常的使用了。当然怎么用&#xff0c;确实需要好好思考一下~ 上文&#xff1a;爬虫后的数据处理与使用&#xff08;处理篇&#xff09; 前言&#xff1a; 一般来说&#xff0c;我…

RabbitMQ--延迟队列

&#xff08;一&#xff09;延迟队列 1.概念 延迟队列是一种特殊的队列&#xff0c;消息被发送后&#xff0c;消费者并不会立刻拿到消息&#xff0c;而是等待一段时间后&#xff0c;消费者才可以从这个队列中拿到消息进行消费 2.应用场景 延迟队列的应用场景很多&#xff0c;…

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈 开发背景 可能大家听过过蓝湖可以转ui设计图为vue.js&#xff0c;react native代码&#xff0c;那么请问听说过将figma的设计图转换为flutter源代码吗?本文优雅草央千澈带…

当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线

问题&#xff1a;当设置dialog中有el-table时&#xff0c;并设置el-table区域的滚动&#xff0c;看到el-table中多了一条横线&#xff1b; 原因&#xff1a;el-table有一个before的伪元素作为表格的下边框下&#xff0c;初始的时候已设置&#xff0c;在滚动的时候并没有重新设置…

代理模式实现

一、概念&#xff1a;代理模式属于结构型设计模式。客户端不能直接访问一个对象&#xff0c;可以通过代理的第三者来间接访问该对象&#xff0c;代理对象控制着对于原对象的访问&#xff0c;并允许在客户端访问对象的前后进行一些扩展和处理&#xff1b;这种设置模式称为代理模…

windows 搭建flutter环境,开发windows程序

环境安装配置&#xff1a; 下载flutter sdk https://docs.flutter.dev/get-started/install/windows 下载到本地后&#xff0c;随便找个地方解压&#xff0c;然后配置下系统环境变量 编译windows程序本地需要安装vs2019或更新的开发环境 主要就这2步安装后就可以了&#xff0…

Redis系列之底层数据结构字典Dict

Redis系列之底层数据结构字典Dict Dict数据结构 Dict是Redis数据结构中使用最为频繁的复合型数据结构&#xff0c;本质上是一个哈希表 查看redis6.0版本的源码&#xff0c;链接&#xff1a;https://github.com/redis/redis/blob/6.0/src/dict.h 哈希表的结构定义&#xff1…

【Azure 架构师学习笔记】- Azure Function (2) --实操1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建&#xff0c;接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…

【NextJS】PostgreSQL 遇上 Prisma ORM

NextJS 数据库 之 遇上Prisma ORM 前言一、环境要求二、概念介绍1、Prisma Schema Language&#xff08;PSL&#xff09; 结构描述语言1.1 概念1.2 组成1.2.1 Data Source 数据源1.2.2 Generators 生成器1.2.3 Data Model Definition 数据模型定义字段(数据)类型和约束关系&…

左神算法基础提升--3

文章目录 Manacher 算法经典算法Manacher算法原理 单调栈或单调队列 Manacher 算法 经典算法 在每学习Manacher算法之前我们可能会使用一种比较经典暴力的算法&#xff1a;遍历str字符串&#xff0c;将字符串中的每个字符作为对称点&#xff0c;向两边扩散找到回文字段&#x…

浅谈操作系统与初识Linux

一、Linux操作系统的出现 1.1操作系统的出现以及相关的四个要素 1.2最早出现的操作系统及其创始人 起初&#xff0c;IBM为了让计算机可以以更低技术成本进行使用&#xff0c;以此来售卖计算机&#xff1b; 为计算机搭载上了Unix操作系统&#xff0c;Unix由肯汤普森用汇编语…

ElasticSearch下

DSL查询 叶子查询&#xff1a;在特定字段里查询特定值&#xff0c;属于简单查询&#xff0c;很少单独使用复合查询&#xff1a;以逻辑方式组合多个叶子查询或更改叶子查询的行为方式 在查询后还可以对查询结果做处理&#xff1a; 排序&#xff1a;按照1个或多个字段做排序分页…

java根据模板导出word,并在word中插入echarts相关统计图片以及表格

引入依赖创建word模板创建ftl模板文件保存的ftl可能会出现占位符分割的问题&#xff0c;需要处理将ftl文件中的图片的Base64删除&#xff0c;并使用占位符代替插入表格&#xff0c;并指定表格的位置在图片下方 Echarts转图片根据模板生成word文档DocUtil导出word文档 生成的wor…

链式前向星的写法

【图论02】动画说图的三种保存方式 降低理解门槛 邻接表 链式前向星 邻接矩阵_哔哩哔哩_bilibili 杭电ACM刘老师-算法入门培训-第12讲-拓扑排序及链式前向星_哔哩哔哩_bilibili 图论003链式前向星_哔哩哔哩_bilibili&#xff08;链式前向星的遍历&#xff09; head数组的下标…

想品客老师的第一天:值类型使用

前面两章的摘要 ECMAscript&#xff08;也就是ES&#xff09;是JavaScript的一个标准&#xff0c;就像c的c11和c99一样&#xff0c;几把的一年出一套标准 freeze()是一个对象方法&#xff0c;表示锁定、固定一个对象不可改变&#xff08;因为const对于标量不可变&#xff0c;…

贪心算法(题1)区间选点

输出 2 #include <iostream> #include<algorithm>using namespace std;const int N 100010 ;int n; struct Range {int l,r;bool operator <(const Range &W)const{return r<W.r;} }range[N];int main() {scanf("%d",&n);for(int i0;i&l…

解决本地运行MR程序访问权限问题

文章目录 1. 提出问题2. 解决问题2.1 临时解决方案2.2 永久解决方案 3. 小结 1. 提出问题 运行DeduplicateIPsDriver类&#xff0c;抛出如下异常&#xff1a; 该错误信息表明在尝试运行 DeduplicateIPsDriver 类时&#xff0c;遇到了 HDFS&#xff08;Hadoop 分布式文件系统&a…

html全局遮罩,通过websocket来实现实时发布公告

1.index.html代码示例 <div id"websocket" style"display:none;position: absolute;color:red;background-color: black;width: 100%;height: 100%;z-index: 100; opacity: 0.9; padding-top: 30%;padding-left: 30%; padding-border:1px; "onclick&q…