@[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软件设计。