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

【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 sys

from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import uic

class 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.menubar
        file_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)  # 得到路径
        # 添加图片到label
        pixmap = QPixmap(f"{self.dir_path_from}")
        self.label.setPixmap(pixmap)
        self.label.setScaledContents(True)

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

2.9 算法代码调用

代码:

    def shadow_code(self):

        # 延迟一秒,执行 delayed_function
        QTimer.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.kler.cn/a/508451.html

相关文章:

  • 【转】厚植根基,同启新程!一文回顾 2024 OpenHarmony 社区年度工作会议精彩瞬间
  • PHP xml 常用函数整理
  • vue 学习笔记 - 创建第一个项目 idea
  • 2025.1.16——三、supersqli 绕过|堆叠注入|handler查询法|预编译绕过法|修改原查询法
  • YoloV10改进策略:Neck层改进|EFC,北理提出的适用小目标的特征融合模块|即插即用
  • 【Linux】Socket编程-TCP构建自己的C++服务器
  • phpstudy靶场搭建问题
  • 【深度学习项目】语义分割-FCN网络(原理、网络架构、基于Pytorch实现FCN网络)
  • 物联网时代,知识库管理系统的拓展与创新
  • npm pack 手动下载非本机平台的依赖包
  • SDL2:Android APP编译使用 -- SDL2多媒体库使用音频实例
  • 数字经济时代下的创新探索与实践:以“开源AI智能名片2+1链动模式S2B2C商城小程序源码”为核心
  • Python基础04(函数)
  • Java UML 类图绘制解析:结构与工具类型详解
  • 淘宝、京东联盟数字ID转加密ID接口
  • CentOS 安装Redis
  • 机器学习之SVD奇异值分解实现图片降维
  • MySQL 数据库 :SQL 语句规约(不得使用外键与级联,一切外键概念必须在应用层解决。)
  • 无人机技术架构剖析!
  • 半导体、芯片、人工智能、智能驾驶汽车的趋势
  • ansible基础
  • 【OpenCV(C++)快速入门】--opencv学习
  • LTX-Video 高效视频生成模型,一键处理图片文字
  • Swift语言的软件开发工具
  • [SUCTF2018]babyre
  • 基于SpringBoot+Vue的药品管理系统【源码+文档+部署讲解】