├── .gitignore ├── ENTRY.py ├── LICENSE ├── README.md ├── main_windows ├── __pycache__ │ ├── main_window.cpython-37.pyc │ └── ui_main_window.cpython-37.pyc ├── main_window.py └── ui_main_window.py ├── static ├── cascade.xml └── icon.ico ├── sub_windows ├── __pycache__ │ ├── sub_window_1.cpython-37.pyc │ ├── sub_window_10.cpython-37.pyc │ ├── sub_window_2.cpython-37.pyc │ ├── sub_window_3.cpython-37.pyc │ ├── sub_window_4.cpython-37.pyc │ ├── sub_window_5.cpython-37.pyc │ ├── sub_window_6.cpython-37.pyc │ ├── sub_window_7.cpython-37.pyc │ ├── sub_window_8.cpython-37.pyc │ ├── ui_sub_window_1.cpython-37.pyc │ ├── ui_sub_window_10.cpython-37.pyc │ ├── ui_sub_window_2.cpython-37.pyc │ ├── ui_sub_window_3.cpython-37.pyc │ ├── ui_sub_window_4.cpython-37.pyc │ ├── ui_sub_window_5.cpython-37.pyc │ ├── ui_sub_window_6.cpython-37.pyc │ ├── ui_sub_window_7.cpython-37.pyc │ └── ui_sub_window_8.cpython-37.pyc ├── sub_window_1.py ├── sub_window_10.py ├── sub_window_2.py ├── sub_window_3.py ├── sub_window_4.py ├── sub_window_5.py ├── sub_window_6.py ├── sub_window_7.py ├── sub_window_8.py ├── ui_sub_window_1.py ├── ui_sub_window_10.py ├── ui_sub_window_2.py ├── ui_sub_window_3.py ├── ui_sub_window_4.py ├── ui_sub_window_5.py ├── ui_sub_window_6.py ├── ui_sub_window_7.py └── ui_sub_window_8.py ├── test_image ├── cameraman.png ├── coins.jpg ├── contours.png ├── hezhao.jpg ├── lena-low-light.png ├── lena-low_duibi.png ├── lena.png ├── lenanoise.png ├── my_mask.png ├── rice.png ├── touxiang1.jpg └── web_img1.jpg └── ui_xml ├── ui_main_window.ui ├── ui_sub_window_1.ui ├── ui_sub_window_10.ui ├── ui_sub_window_2.ui ├── ui_sub_window_3.ui ├── ui_sub_window_4.ui ├── ui_sub_window_5.ui ├── ui_sub_window_6.ui ├── ui_sub_window_7.ui └── ui_sub_window_8.ui /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/.gitignore -------------------------------------------------------------------------------- /ENTRY.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | from PyQt5.QtWidgets import QApplication 4 | 5 | # 窗口实例 6 | from main_windows import main_window 7 | 8 | 9 | def main(): 10 | app = QApplication(sys.argv) 11 | main_window_ = main_window.MainWindow() 12 | main_window_.show() 13 | sys.exit(app.exec_()) 14 | 15 | 16 | if __name__ == '__main__': 17 | main() 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 毕设助攻,770409504@qq.com,1对1定制辅导 2 | 3 | # 概述 4 | 5 | 软件名称:图像处理仿真系统 6 | 7 | 软件用途:本课题针对图像处理的难点,设计了一款界面友好的图像处理仿真系统,意在帮助初学者形象的理解图像处理所涉及的部分知识点。 8 | 9 | 软件功能:该软件包含常见的图像处理实例,例如图像缩放、加噪、平滑锐化、直方图均衡、压缩编码,边缘检测、人脸检测等。这些模块涉及到较多图像处理知识,通过每个模块设计的实例,循序渐进的让初学者加深理解图像处理方法间的联系,激发初学者对图像处理的兴趣。 10 | 11 | 软件架构:本设计利用PyCharm和QT Designer开发平台,基于Python编程语言以及OpenCV计算机视觉库,利用Qt5作为GUI框架,构建了一个兼容Windows-x86平台的软件。 12 | 13 | 14 | 15 | # 目录结构 16 | 17 | main_windows 是主窗口 18 | sub_windows 是子窗口 19 | ENTRY.py 是程序入点 20 | ui_xml 是QT-GUI描述文件 21 | static 是必须依赖 22 | test_image 是测试图片 23 | 24 | 2019年6月19日 25 | -------------------------------------------------------------------------------- /main_windows/__pycache__/main_window.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/main_windows/__pycache__/main_window.cpython-37.pyc -------------------------------------------------------------------------------- /main_windows/__pycache__/ui_main_window.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/main_windows/__pycache__/ui_main_window.cpython-37.pyc -------------------------------------------------------------------------------- /main_windows/main_window.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtWidgets import * 2 | from PyQt5.QtGui import QIcon 3 | 4 | # 主布局 5 | from main_windows import ui_main_window 6 | 7 | # 子窗口实例 8 | from sub_windows import sub_window_1 9 | from sub_windows import sub_window_2 10 | from sub_windows import sub_window_3 11 | from sub_windows import sub_window_4 12 | from sub_windows import sub_window_5 13 | from sub_windows import sub_window_6 14 | from sub_windows import sub_window_7 15 | from sub_windows import sub_window_8 16 | from sub_windows import sub_window_10 17 | 18 | 19 | class MainWindow(QMainWindow): 20 | 21 | def __init__(self): 22 | super().__init__(parent=None) 23 | # 布局初始化 24 | self.ui = ui_main_window.Ui_Form() 25 | self.ui.setupUi(Form=self) 26 | # 子窗口实例化命名空间 27 | self.sub_window_1_ = None # 色彩空间转换 28 | self.sub_window_2_ = None # 图像缩放剪裁 29 | self.sub_window_3_ = None # 图像加噪平滑 30 | self.sub_window_4_ = None # 图像锐化 31 | self.sub_window_5_ = None # 直方图变换 32 | self.sub_window_6_ = None # DCT图像压缩 33 | self.sub_window_7_ = None # Canny边缘检测 34 | self.sub_window_8_ = None # 人脸检测实例 35 | self.sub_window_10_ = None # 关于页面 36 | # 多线程 37 | pass 38 | # 信号与槽定义 39 | self.signal_and_slot() 40 | # 图标 41 | self.setWindowIcon(QIcon('./static/icon.ico')) 42 | 43 | def signal_and_slot(self): 44 | self.ui.pushButton_1.clicked.connect(self.pushButton_1) 45 | self.ui.pushButton_2.clicked.connect(self.pushButton_2) 46 | self.ui.pushButton_3.clicked.connect(self.pushButton_3) 47 | self.ui.pushButton_4.clicked.connect(self.pushButton_4) 48 | self.ui.pushButton_5.clicked.connect(self.pushButton_5) 49 | self.ui.pushButton_6.clicked.connect(self.pushButton_6) 50 | self.ui.pushButton_7.clicked.connect(self.pushButton_7) 51 | self.ui.pushButton_8.clicked.connect(self.pushButton_8) 52 | self.ui.pushButton_10.clicked.connect(self.pushButton_10) 53 | 54 | def pushButton_1(self): 55 | self.sub_window_1_ = sub_window_1.SubWindow() 56 | self.sub_window_1_.show() 57 | 58 | def pushButton_2(self): 59 | self.sub_window_2_ = sub_window_2.SubWindow() 60 | self.sub_window_2_.show() 61 | 62 | def pushButton_3(self): 63 | self.sub_window_3_ = sub_window_3.SubWindow() 64 | self.sub_window_3_.show() 65 | 66 | def pushButton_4(self): 67 | self.sub_window_4_ = sub_window_4.SubWindow() 68 | self.sub_window_4_.show() 69 | 70 | def pushButton_5(self): 71 | self.sub_window_5_ = sub_window_5.SubWindow() 72 | self.sub_window_5_.show() 73 | 74 | def pushButton_6(self): 75 | self.sub_window_6_ = sub_window_6.SubWindow() 76 | self.sub_window_6_.show() 77 | 78 | def pushButton_7(self): 79 | self.sub_window_7_ = sub_window_7.SubWindow() 80 | self.sub_window_7_.show() 81 | 82 | def pushButton_8(self): 83 | self.sub_window_8_ = sub_window_8.SubWindow() 84 | self.sub_window_8_.show() 85 | 86 | def pushButton_10(self): 87 | self.sub_window_10_ = sub_window_10.SubWindow() 88 | self.sub_window_10_.show() 89 | -------------------------------------------------------------------------------- /main_windows/ui_main_window.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_main_window.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(733, 546) 15 | self.label = QtWidgets.QLabel(Form) 16 | self.label.setGeometry(QtCore.QRect(220, 10, 291, 61)) 17 | font = QtGui.QFont() 18 | font.setFamily("黑体") 19 | font.setPointSize(20) 20 | font.setBold(False) 21 | font.setWeight(50) 22 | self.label.setFont(font) 23 | self.label.setAlignment(QtCore.Qt.AlignCenter) 24 | self.label.setObjectName("label") 25 | self.groupBox = QtWidgets.QGroupBox(Form) 26 | self.groupBox.setGeometry(QtCore.QRect(30, 130, 331, 261)) 27 | self.groupBox.setObjectName("groupBox") 28 | self.pushButton_1 = QtWidgets.QPushButton(self.groupBox) 29 | self.pushButton_1.setGeometry(QtCore.QRect(40, 50, 111, 71)) 30 | self.pushButton_1.setObjectName("pushButton_1") 31 | self.pushButton_2 = QtWidgets.QPushButton(self.groupBox) 32 | self.pushButton_2.setGeometry(QtCore.QRect(170, 50, 111, 71)) 33 | self.pushButton_2.setObjectName("pushButton_2") 34 | self.pushButton_3 = QtWidgets.QPushButton(self.groupBox) 35 | self.pushButton_3.setGeometry(QtCore.QRect(40, 140, 111, 71)) 36 | self.pushButton_3.setObjectName("pushButton_3") 37 | self.pushButton_4 = QtWidgets.QPushButton(self.groupBox) 38 | self.pushButton_4.setGeometry(QtCore.QRect(170, 140, 111, 71)) 39 | self.pushButton_4.setObjectName("pushButton_4") 40 | self.groupBox_2 = QtWidgets.QGroupBox(Form) 41 | self.groupBox_2.setGeometry(QtCore.QRect(380, 130, 331, 261)) 42 | self.groupBox_2.setObjectName("groupBox_2") 43 | self.pushButton_8 = QtWidgets.QPushButton(self.groupBox_2) 44 | self.pushButton_8.setGeometry(QtCore.QRect(180, 140, 111, 71)) 45 | self.pushButton_8.setObjectName("pushButton_8") 46 | self.pushButton_6 = QtWidgets.QPushButton(self.groupBox_2) 47 | self.pushButton_6.setGeometry(QtCore.QRect(180, 50, 111, 71)) 48 | self.pushButton_6.setObjectName("pushButton_6") 49 | self.pushButton_5 = QtWidgets.QPushButton(self.groupBox_2) 50 | self.pushButton_5.setGeometry(QtCore.QRect(50, 50, 111, 71)) 51 | self.pushButton_5.setObjectName("pushButton_5") 52 | self.pushButton_7 = QtWidgets.QPushButton(self.groupBox_2) 53 | self.pushButton_7.setGeometry(QtCore.QRect(50, 140, 111, 71)) 54 | self.pushButton_7.setObjectName("pushButton_7") 55 | self.pushButton_10 = QtWidgets.QPushButton(Form) 56 | self.pushButton_10.setGeometry(QtCore.QRect(560, 430, 111, 71)) 57 | self.pushButton_10.setObjectName("pushButton_10") 58 | 59 | self.retranslateUi(Form) 60 | QtCore.QMetaObject.connectSlotsByName(Form) 61 | 62 | def retranslateUi(self, Form): 63 | _translate = QtCore.QCoreApplication.translate 64 | Form.setWindowTitle(_translate("Form", "图像处理仿真系统")) 65 | self.label.setText(_translate("Form", "图像处理仿真系统")) 66 | self.groupBox.setTitle(_translate("Form", "图像变换")) 67 | self.pushButton_1.setText(_translate("Form", "色彩空间转换")) 68 | self.pushButton_2.setText(_translate("Form", "图像缩放剪裁")) 69 | self.pushButton_3.setText(_translate("Form", "图像加噪平滑")) 70 | self.pushButton_4.setText(_translate("Form", "图像锐化")) 71 | self.groupBox_2.setTitle(_translate("Form", "应用实例")) 72 | self.pushButton_8.setText(_translate("Form", "人脸检测")) 73 | self.pushButton_6.setText(_translate("Form", "图像压缩")) 74 | self.pushButton_5.setText(_translate("Form", "直方图变换")) 75 | self.pushButton_7.setText(_translate("Form", "边缘检测")) 76 | self.pushButton_10.setText(_translate("Form", "关于")) 77 | 78 | -------------------------------------------------------------------------------- /static/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/static/icon.ico -------------------------------------------------------------------------------- /sub_windows/__pycache__/sub_window_1.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/sub_window_1.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/sub_window_10.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/sub_window_10.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/sub_window_2.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/sub_window_2.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/sub_window_3.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/sub_window_3.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/sub_window_4.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/sub_window_4.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/sub_window_5.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/sub_window_5.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/sub_window_6.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/sub_window_6.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/sub_window_7.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/sub_window_7.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/sub_window_8.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/sub_window_8.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/ui_sub_window_1.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/ui_sub_window_1.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/ui_sub_window_10.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/ui_sub_window_10.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/ui_sub_window_2.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/ui_sub_window_2.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/ui_sub_window_3.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/ui_sub_window_3.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/ui_sub_window_4.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/ui_sub_window_4.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/ui_sub_window_5.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/ui_sub_window_5.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/ui_sub_window_6.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/ui_sub_window_6.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/ui_sub_window_7.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/ui_sub_window_7.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/__pycache__/ui_sub_window_8.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/sub_windows/__pycache__/ui_sub_window_8.cpython-37.pyc -------------------------------------------------------------------------------- /sub_windows/sub_window_1.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | from PyQt5.QtGui import * 3 | from PyQt5.QtWidgets import * 4 | 5 | # 子窗口布局 6 | from sub_windows import ui_sub_window_1 7 | 8 | 9 | class SubWindow(QMainWindow): 10 | def __init__(self): 11 | super().__init__(parent=None) 12 | self.ui = ui_sub_window_1.Ui_Form() 13 | self.ui.setupUi(self) 14 | self.ui_init() 15 | self.cv_srcImage = None 16 | self.q_image = None 17 | 18 | def ui_init(self): 19 | self.ui.pushButton_open_file.clicked.connect(self.open_file) 20 | self.ui.pushButton_gray_convert.clicked.connect(self.gray_convert) 21 | self.ui.pushButton_bin_convert.clicked.connect(self.bin_convert) 22 | self.ui.pushButton_reset.clicked.connect(self.reset) 23 | 24 | def open_file(self): 25 | file_path, file_type = QFileDialog.getOpenFileName(QFileDialog(), '选择图片', '', '图像文件(*.jpg *.bmp *.png)') 26 | self.cv_srcImage = cv2.imread(file_path) 27 | height, width, channels = self.cv_srcImage.shape 28 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 29 | if width > height: 30 | ui_image = ui_image.scaledToWidth(self.ui.label_image.width()) 31 | else: 32 | ui_image = ui_image.scaledToHeight(self.ui.label_image.height()) 33 | self._update_qimage_to_label(ui_image) 34 | self._show_image_information(1) 35 | self._set_pushbutton_enabled() 36 | 37 | def gray_convert(self): 38 | gray_image = cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2GRAY) 39 | height, width = gray_image.shape 40 | ui_image = QImage(cv2.cvtColor(gray_image, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 41 | if width > height: 42 | ui_image = ui_image.scaledToWidth(self.ui.label_image.width()) 43 | else: 44 | ui_image = ui_image.scaledToHeight(self.ui.label_image.height()) 45 | self._update_qimage_to_label(ui_image) 46 | self._show_image_information(2) 47 | 48 | def bin_convert(self): 49 | threshold_value = int(self.ui.spinBox_bin_threshold.value()) 50 | gray_image = cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2GRAY) 51 | ret, bin_image = cv2.threshold(gray_image, threshold_value, 255, cv2.THRESH_BINARY) 52 | height, width = bin_image.shape 53 | ui_image = QImage(cv2.cvtColor(bin_image, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 54 | if width > height: 55 | ui_image = ui_image.scaledToWidth(self.ui.label_image.width()) 56 | else: 57 | ui_image = ui_image.scaledToHeight(self.ui.label_image.height()) 58 | self._update_qimage_to_label(ui_image) 59 | self._show_image_information(3) 60 | 61 | def reset(self): 62 | height, width, channels = self.cv_srcImage.shape 63 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 64 | if width > height: 65 | ui_image = ui_image.scaledToWidth(self.ui.label_image.width()) 66 | else: 67 | ui_image = ui_image.scaledToHeight(self.ui.label_image.height()) 68 | self._update_qimage_to_label(ui_image) 69 | self._show_image_information(1) 70 | 71 | def _update_qimage_to_label(self, qimage): 72 | self.ui.label_image.setPixmap(QPixmap.fromImage(qimage)) 73 | 74 | def _show_image_information(self, current_image_type): 75 | if current_image_type == 1: 76 | self.ui.label_color_space_2.setText('彩色图') 77 | if current_image_type == 2: 78 | self.ui.label_color_space_2.setText('灰度图') 79 | if current_image_type == 3: 80 | self.ui.label_color_space_2.setText('二值图') 81 | 82 | def _set_pushbutton_enabled(self): 83 | self.ui.pushButton_gray_convert.setEnabled(True) 84 | self.ui.pushButton_bin_convert.setEnabled(True) 85 | self.ui.pushButton_reset.setEnabled(True) -------------------------------------------------------------------------------- /sub_windows/sub_window_10.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtWidgets import * 2 | 3 | # 子窗口布局 4 | from sub_windows import ui_sub_window_10 5 | 6 | 7 | class SubWindow(QMainWindow): 8 | def __init__(self): 9 | super().__init__(parent=None) 10 | self.ui = ui_sub_window_10.Ui_Form() 11 | self.ui.setupUi(self) 12 | self.cv_srcImage = None 13 | self.saveImage = None 14 | self.ui_init() 15 | 16 | def ui_init(self): 17 | pass 18 | 19 | -------------------------------------------------------------------------------- /sub_windows/sub_window_2.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | from PyQt5.QtGui import * 3 | from PyQt5.QtWidgets import * 4 | 5 | # 子窗口布局 6 | from sub_windows import ui_sub_window_2 7 | 8 | 9 | class SubWindow(QMainWindow): 10 | def __init__(self): 11 | super().__init__(parent=None) 12 | self.ui = ui_sub_window_2.Ui_Form() 13 | self.ui.setupUi(self) 14 | self.ui_init() 15 | self.zoom_factor = 1.0 16 | self.cv_srcImage = None 17 | self.q_image = None 18 | 19 | def ui_init(self): 20 | self.ui.pushButton_open_file.clicked.connect(self.open_file) 21 | self.ui.pushButton_zoom_in.clicked.connect(self.zoom_in) 22 | self.ui.pushButton_zoom_out.clicked.connect(self.zoom_out) 23 | self.ui.pushButton_zoom_reset.clicked.connect(self.zoom_reset) 24 | self.ui.pushButton_screenshot.clicked.connect(self.clip_image) 25 | 26 | def open_file(self): 27 | file_path, file_type = QFileDialog.getOpenFileName(QFileDialog(), '选择图片', '', '图像文件(*.jpg *.bmp *.png)') 28 | self.cv_srcImage = cv2.imread(file_path) 29 | height, width, channels = self.cv_srcImage.shape 30 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 31 | if width > height: 32 | ui_image = ui_image.scaledToWidth(self.ui.label_image.width()) 33 | else: 34 | ui_image = ui_image.scaledToHeight(self.ui.label_image.height()) 35 | self.zoom_factor = 1.0 36 | self._show_qimage_to_label(ui_image) 37 | 38 | def zoom_in(self): 39 | if 10 > self.zoom_factor > 0.1: 40 | self.zoom_factor += 0.1 41 | print(self.zoom_factor) 42 | height, width, channels = self.cv_srcImage.shape 43 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 44 | if width > height: 45 | ui_image = ui_image.scaledToWidth(self.ui.label_image.width() * self.zoom_factor) 46 | else: 47 | ui_image = ui_image.scaledToHeight(self.ui.label_image.height() * self.zoom_factor) 48 | self._show_qimage_to_label(ui_image) 49 | 50 | def zoom_out(self): 51 | if 10 > self.zoom_factor > 0.2: 52 | self.zoom_factor -= 0.1 53 | print(self.zoom_factor) 54 | height, width, channels = self.cv_srcImage.shape 55 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 56 | if width > height: 57 | ui_image = ui_image.scaledToWidth(self.ui.label_image.width() * self.zoom_factor) 58 | else: 59 | ui_image = ui_image.scaledToHeight(self.ui.label_image.height() * self.zoom_factor) 60 | self._show_qimage_to_label(ui_image) 61 | 62 | def zoom_reset(self): 63 | self.zoom_factor = 1.0 64 | height, width, channels = self.cv_srcImage.shape 65 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 66 | if width > height: 67 | ui_image = ui_image.scaledToWidth(self.ui.label_image.width()) 68 | else: 69 | ui_image = ui_image.scaledToHeight(self.ui.label_image.height()) 70 | self._show_qimage_to_label(ui_image) 71 | 72 | def clip_image(self): 73 | anchor_x = int(self.ui.spinBox_anchor_x.value()) 74 | anchor_y = int(self.ui.spinBox_anchor_y.value()) 75 | offset_x = int(self.ui.spinBox_X_offset.value()) 76 | offset_y = int(self.ui.spinBox_Y_offset.value()) 77 | clip_image = self.cv_srcImage.copy()[anchor_y: offset_y - 1, anchor_x: offset_x - 1] 78 | cv2.imshow('clip_image', clip_image) 79 | cv2.waitKey(0) 80 | 81 | def _show_zoom_factor(self): 82 | self.ui.label_zoom_factor_2.setText(str(self.zoom_factor)[:3] + 'x') 83 | 84 | def _update_srcImage_size(self): 85 | height, width, channels = self.cv_srcImage.shape 86 | self.ui.label_srcImage_size.setText('原图X轴*Y轴:' + str(width) + ' x ' + str(height)) 87 | self.ui.spinBox_anchor_x.setMaximum(width) 88 | self.ui.spinBox_anchor_y.setMaximum(height) 89 | self.ui.spinBox_X_offset.setMaximum(width) 90 | self.ui.spinBox_Y_offset.setMaximum(height) 91 | self.ui.spinBox_anchor_x.setValue(0) 92 | self.ui.spinBox_anchor_y.setValue(0) 93 | self.ui.spinBox_X_offset.setValue(width) 94 | self.ui.spinBox_Y_offset.setValue(height) 95 | 96 | def _show_qimage_to_label(self, qimage): 97 | self.ui.label_image.setPixmap(QPixmap.fromImage(qimage)) 98 | self._show_zoom_factor() 99 | self._update_srcImage_size() -------------------------------------------------------------------------------- /sub_windows/sub_window_3.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import numpy as np 3 | from PyQt5.QtGui import * 4 | from PyQt5.QtWidgets import * 5 | 6 | # 子窗口布局 7 | from sub_windows import ui_sub_window_3 8 | 9 | 10 | class SubWindow(QMainWindow): 11 | def __init__(self): 12 | super().__init__(parent=None) 13 | self.ui = ui_sub_window_3.Ui_Form() 14 | self.ui.setupUi(self) 15 | self.ui_init() 16 | self.cv_srcImage = None 17 | self.cv_noiseImage = None 18 | self.cv_blurImage = None 19 | 20 | def ui_init(self): 21 | self._group_enable_ctrl() 22 | # 下拉选择 23 | noise_type_list = ['椒盐噪声', '高斯噪声', '乘积性噪声'] 24 | self.ui.comboBox_noise_type.addItems(noise_type_list) 25 | self.ui.comboBox_noise_type.activated.connect(self.comboBox_noise_type_selected) 26 | filter_type_list = ['均值滤波', '高斯滤波', '中值滤波', '双边滤波'] 27 | self.ui.comboBox_filter_type.addItems(filter_type_list) 28 | self.ui.comboBox_filter_type.activated.connect(self.comboBox_filter_type_selected) 29 | # 按钮 30 | self.ui.pushButton_open_file.clicked.connect(self.open_file) 31 | self.ui.pushButton_salt_pepper_noise.clicked.connect(self.salt_pepper_noise) 32 | self.ui.pushButton_gasuss_noise.clicked.connect(self.gasuss_noise) 33 | self.ui.pushButton_speckle_noise.clicked.connect(self.speckle_noise) 34 | self.ui.pushButton_mean_blur_filter.clicked.connect(self.mean_blur_filter) 35 | self.ui.pushButton_gauss_blur_filter.clicked.connect(self.gauss_blur_filter) 36 | self.ui.pushButton_median_blur_filter.clicked.connect(self.median_blur_filter) 37 | self.ui.pushButton_double_blur_filter.clicked.connect(self.double_blur_filter) 38 | 39 | def _group_enable_ctrl(self, flag=None): 40 | if flag is None: 41 | self.ui.groupBox_salt_noise.setEnabled(False) 42 | self.ui.groupBox_gauss_noise.setEnabled(False) 43 | self.ui.groupBox_speckle_noise.setEnabled(False) 44 | self.ui.groupBox_mean_blur_filter.setEnabled(False) 45 | self.ui.groupBox_gauss_blur_filter.setEnabled(False) 46 | self.ui.groupBox_median_blur_filter.setEnabled(False) 47 | self.ui.groupBox_double_blur_filter.setEnabled(False) 48 | elif flag == '椒盐噪声' and self.cv_srcImage is not None: 49 | self.ui.groupBox_salt_noise.setEnabled(True) 50 | self.ui.groupBox_gauss_noise.setEnabled(False) 51 | self.ui.groupBox_speckle_noise.setEnabled(False) 52 | elif flag == '高斯噪声' and self.cv_srcImage is not None: 53 | self.ui.groupBox_salt_noise.setEnabled(False) 54 | self.ui.groupBox_gauss_noise.setEnabled(True) 55 | self.ui.groupBox_speckle_noise.setEnabled(False) 56 | elif flag == '乘积性噪声' and self.cv_srcImage is not None: 57 | self.ui.groupBox_salt_noise.setEnabled(False) 58 | self.ui.groupBox_gauss_noise.setEnabled(False) 59 | self.ui.groupBox_speckle_noise.setEnabled(True) 60 | elif flag == '均值滤波' and self.cv_srcImage is not None: 61 | self.ui.groupBox_mean_blur_filter.setEnabled(True) 62 | self.ui.groupBox_gauss_blur_filter.setEnabled(False) 63 | self.ui.groupBox_median_blur_filter.setEnabled(False) 64 | self.ui.groupBox_double_blur_filter.setEnabled(False) 65 | elif flag == '高斯滤波' and self.cv_srcImage is not None: 66 | self.ui.groupBox_mean_blur_filter.setEnabled(False) 67 | self.ui.groupBox_gauss_blur_filter.setEnabled(True) 68 | self.ui.groupBox_median_blur_filter.setEnabled(False) 69 | self.ui.groupBox_double_blur_filter.setEnabled(False) 70 | elif flag == '中值滤波' and self.cv_srcImage is not None: 71 | self.ui.groupBox_mean_blur_filter.setEnabled(False) 72 | self.ui.groupBox_gauss_blur_filter.setEnabled(False) 73 | self.ui.groupBox_median_blur_filter.setEnabled(True) 74 | self.ui.groupBox_double_blur_filter.setEnabled(False) 75 | elif flag == '双边滤波' and self.cv_srcImage is not None: 76 | self.ui.groupBox_mean_blur_filter.setEnabled(False) 77 | self.ui.groupBox_gauss_blur_filter.setEnabled(False) 78 | self.ui.groupBox_median_blur_filter.setEnabled(False) 79 | self.ui.groupBox_double_blur_filter.setEnabled(True) 80 | 81 | def open_file(self): 82 | file_path, file_type = QFileDialog.getOpenFileName(QFileDialog(), '选择图片', '', '*.jpg *.bmp *.png *tif') 83 | self.cv_srcImage = cv2.imread(file_path) 84 | height, width, channels = self.cv_srcImage.shape 85 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 86 | if width > height: 87 | ui_image = ui_image.scaledToWidth(self.ui.label_image_1.width()) 88 | else: 89 | ui_image = ui_image.scaledToHeight(self.ui.label_image_1.height()) 90 | self.ui.label_image_1.setPixmap(QPixmap.fromImage(ui_image)) 91 | 92 | def comboBox_noise_type_selected(self): 93 | selected = self.ui.comboBox_noise_type.currentText() 94 | self._group_enable_ctrl(flag=selected) 95 | 96 | def comboBox_filter_type_selected(self): 97 | selected = self.ui.comboBox_filter_type.currentText() 98 | self._group_enable_ctrl(flag=selected) 99 | 100 | def salt_pepper_noise(self): 101 | def _salt_pepper_noise(image, proportion, mode=1): 102 | copyImage = image.copy() 103 | height, width, channels = copyImage.shape 104 | noise_pixel_num = int(height * width * proportion) 105 | if mode == 1 and channels == 3: 106 | for k in range(noise_pixel_num): 107 | x_axis = int(np.random.random() * width) 108 | y_axis = int(np.random.random() * height) 109 | salt_pepper_flag = np.random.choice((True, False)) 110 | copyImage[y_axis, x_axis, 0] = 255 if salt_pepper_flag else 0 111 | copyImage[y_axis, x_axis, 1] = 255 if salt_pepper_flag else 0 112 | copyImage[y_axis, x_axis, 2] = 255 if salt_pepper_flag else 0 113 | return copyImage 114 | elif mode == 1 and channels == 2: 115 | for k in range(noise_pixel_num): 116 | x_axis = int(np.random.random() * width) 117 | y_axis = int(np.random.random() * height) 118 | salt_pepper_flag = np.random.choice((True, False)) 119 | copyImage[y_axis, x_axis] = 255 if salt_pepper_flag else 0 120 | return copyImage 121 | elif mode == 2 and channels == 3: 122 | for k in range(noise_pixel_num): 123 | x_axis = int(np.random.random() * width) 124 | y_axis = int(np.random.random() * height) 125 | copyImage[y_axis, x_axis, 0] = 255 126 | copyImage[y_axis, x_axis, 1] = 255 127 | copyImage[y_axis, x_axis, 2] = 255 128 | return copyImage 129 | elif mode == 2 and channels == 2: 130 | for k in range(noise_pixel_num): 131 | x_axis = int(np.random.random() * width) 132 | y_axis = int(np.random.random() * height) 133 | copyImage[y_axis, x_axis] = 255 134 | return copyImage 135 | elif mode == 3 and channels == 3: 136 | for k in range(noise_pixel_num): 137 | x_axis = int(np.random.random() * width) 138 | y_axis = int(np.random.random() * height) 139 | copyImage[y_axis, x_axis, 0] = 0 140 | copyImage[y_axis, x_axis, 1] = 0 141 | copyImage[y_axis, x_axis, 2] = 0 142 | return copyImage 143 | elif mode == 3 and channels == 3: 144 | for k in range(noise_pixel_num): 145 | x_axis = int(np.random.random() * width) 146 | y_axis = int(np.random.random() * height) 147 | copyImage[y_axis, x_axis] = 0 148 | return copyImage 149 | proportion = self.ui.doubleSpinBox_salt_proportion.value() 150 | mode = 1 151 | if self.ui.radioButton_1.isChecked(): 152 | mode = 1 153 | elif self.ui.radioButton_2.isChecked(): 154 | mode = 2 155 | elif self.ui.radioButton_3.isChecked(): 156 | mode = 3 157 | self.cv_noiseImage = _salt_pepper_noise(image=self.cv_srcImage, proportion=proportion, mode=mode) 158 | height, width, channels = self.cv_noiseImage.shape 159 | ui_image = QImage(cv2.cvtColor(self.cv_noiseImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 160 | if width > height: 161 | ui_image = ui_image.scaledToWidth(self.ui.label_image_2.width()) 162 | else: 163 | ui_image = ui_image.scaledToHeight(self.ui.label_image_2.height()) 164 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 165 | 166 | def gasuss_noise(self): 167 | def _gasuss_noise(image, mean=0.0, var=0.1): 168 | copyImage = image.copy() 169 | noise = np.random.normal(loc=mean, scale=var, size=copyImage.shape) 170 | copyImage = np.array(copyImage / 255, dtype=float) 171 | out = copyImage + noise 172 | out = np.clip(out, 0.0, 1.0) 173 | out = np.uint8(out * 255) 174 | return out 175 | mean = self.ui.doubleSpinBox_gauss_mean.value() 176 | var = self.ui.doubleSpinBox_gauss_var.value() 177 | self.cv_noiseImage = _gasuss_noise(image=self.cv_srcImage, mean=mean, var=var) 178 | height, width, channels = self.cv_noiseImage.shape 179 | ui_image = QImage(cv2.cvtColor(self.cv_noiseImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 180 | if width > height: 181 | ui_image = ui_image.scaledToWidth(self.ui.label_image_2.width()) 182 | else: 183 | ui_image = ui_image.scaledToHeight(self.ui.label_image_2.height()) 184 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 185 | 186 | def speckle_noise(self): 187 | def _speckle_noise(image, mean=0.0, var=0.2): 188 | copyImage = image.copy() 189 | noise = np.random.normal(loc=mean, scale=var, size=copyImage.shape) 190 | copyImage = np.array(copyImage / 255, dtype=float) 191 | out = (1 + noise) * copyImage 192 | out = np.clip(out, 0.0, 1.0) 193 | out = np.uint8(out * 255) 194 | return out 195 | 196 | mean = self.ui.doubleSpinBox_speckle_mean.value() 197 | var = self.ui.doubleSpinBox_speckle_var.value() 198 | self.cv_noiseImage = _speckle_noise(image=self.cv_srcImage, mean=mean, var=var) 199 | height, width, channels = self.cv_noiseImage.shape 200 | ui_image = QImage(cv2.cvtColor(self.cv_noiseImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 201 | if width > height: 202 | ui_image = ui_image.scaledToWidth(self.ui.label_image_2.width()) 203 | else: 204 | ui_image = ui_image.scaledToHeight(self.ui.label_image_2.height()) 205 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 206 | 207 | def mean_blur_filter(self): 208 | def _mean_blur_filter(image, size=5): 209 | copyImage = image.copy() 210 | if int(size) % 2 == 0: 211 | return None 212 | copyImage = cv2.blur(copyImage, ksize=(int(size), int(size))) 213 | return copyImage 214 | size = self.ui.spinBox_mean_ksize.value() 215 | self.cv_blurImage = _mean_blur_filter(image=self.cv_noiseImage, size=size) 216 | height, width, channels = self.cv_blurImage.shape 217 | ui_image = QImage(cv2.cvtColor(self.cv_blurImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 218 | if width > height: 219 | ui_image = ui_image.scaledToWidth(self.ui.label_image_3.width()) 220 | else: 221 | ui_image = ui_image.scaledToHeight(self.ui.label_image_3.height()) 222 | self.ui.label_image_3.setPixmap(QPixmap.fromImage(ui_image)) 223 | 224 | def gauss_blur_filter(self): 225 | def _gauss_blur_filter(image, size=5): 226 | copyImage = image.copy() 227 | if int(size) % 2 == 0: 228 | return None 229 | copyImage = cv2.GaussianBlur(copyImage, ksize=(int(size), int(size)), sigmaX=0, sigmaY=0) 230 | return copyImage 231 | size = self.ui.spinBox_gauss_blur_ksize.value() 232 | self.cv_blurImage = _gauss_blur_filter(image=self.cv_noiseImage, size=size) 233 | height, width, channels = self.cv_blurImage.shape 234 | ui_image = QImage(cv2.cvtColor(self.cv_blurImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 235 | if width > height: 236 | ui_image = ui_image.scaledToWidth(self.ui.label_image_3.width()) 237 | else: 238 | ui_image = ui_image.scaledToHeight(self.ui.label_image_3.height()) 239 | self.ui.label_image_3.setPixmap(QPixmap.fromImage(ui_image)) 240 | 241 | def median_blur_filter(self): 242 | def _median_blur_filter(image, size=5): 243 | copyImage = image.copy() 244 | if int(size) % 2 == 0: 245 | return None 246 | copyImage = cv2.medianBlur(copyImage, ksize=int(size)) 247 | return copyImage 248 | size = self.ui.spinBox_median_ksize.value() 249 | self.cv_blurImage = _median_blur_filter(image=self.cv_noiseImage, size=size) 250 | height, width, channels = self.cv_blurImage.shape 251 | ui_image = QImage(cv2.cvtColor(self.cv_blurImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 252 | if width > height: 253 | ui_image = ui_image.scaledToWidth(self.ui.label_image_3.width()) 254 | else: 255 | ui_image = ui_image.scaledToHeight(self.ui.label_image_3.height()) 256 | self.ui.label_image_3.setPixmap(QPixmap.fromImage(ui_image)) 257 | 258 | def double_blur_filter(self): 259 | def _double_blur_filter(image): 260 | copyImage = image.copy() 261 | copyImage = cv2.bilateralFilter(copyImage, d=25, sigmaColor=25 * 2, sigmaSpace=25 / 2) 262 | return copyImage 263 | self.cv_blurImage = _double_blur_filter(image=self.cv_srcImage) 264 | height, width, channels = self.cv_blurImage.shape 265 | ui_image = QImage(cv2.cvtColor(self.cv_blurImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 266 | if width > height: 267 | ui_image = ui_image.scaledToWidth(self.ui.label_image_3.width()) 268 | else: 269 | ui_image = ui_image.scaledToHeight(self.ui.label_image_3.height()) 270 | self.ui.label_image_3.setPixmap(QPixmap.fromImage(ui_image)) 271 | cv2.namedWindow('haha', cv2.WINDOW_NORMAL) 272 | cv2.imshow('haha', self.cv_blurImage) 273 | cv2.waitKey(0) 274 | -------------------------------------------------------------------------------- /sub_windows/sub_window_4.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import numpy as np 3 | from PyQt5.QtGui import * 4 | from PyQt5.QtWidgets import * 5 | 6 | # 子窗口布局 7 | from sub_windows import ui_sub_window_4 8 | 9 | 10 | class SubWindow(QMainWindow): 11 | def __init__(self): 12 | super().__init__(parent=None) 13 | self.ui = ui_sub_window_4.Ui_Form() 14 | self.ui.setupUi(self) 15 | self.ui_init() 16 | 17 | def ui_init(self): 18 | sharpen_type_list = ['Sobel算子', 'Laplace算子', '自定义卷积核'] 19 | self.ui.comboBox_selector.addItems(sharpen_type_list) 20 | self.ui.comboBox_selector.activated.connect(self.comboBox_selected) 21 | self.ui.pushButton_open_file.clicked.connect(self.open_file) 22 | self.ui.pushButton_sobel_filter.clicked.connect(self.sobel_sharpen_filter) 23 | self.ui.pushButton_laplace_filter.clicked.connect(self.laplacian_sharpen_filter) 24 | self.ui.pushButton_custom_filter.clicked.connect(self.custom_filter) 25 | self.cv_srcImage = None 26 | self.cv_sharpenImage = None 27 | self._group_enable_ctrl() 28 | pass 29 | 30 | def comboBox_selected(self): 31 | selected = self.ui.comboBox_selector.currentText() 32 | self._group_enable_ctrl(selected=selected) 33 | 34 | def _group_enable_ctrl(self, selected=None): 35 | if selected is None: 36 | self.ui.groupBox_sobel_filter.setEnabled(False) 37 | self.ui.groupBox_laplace_filter.setEnabled(False) 38 | self.ui.groupBox_custom_filter.setEnabled(False) 39 | elif selected == 'Sobel算子': 40 | self.ui.groupBox_sobel_filter.setEnabled(True) 41 | self.ui.groupBox_laplace_filter.setEnabled(False) 42 | self.ui.groupBox_custom_filter.setEnabled(False) 43 | elif selected == 'Laplace算子': 44 | self.ui.groupBox_sobel_filter.setEnabled(False) 45 | self.ui.groupBox_laplace_filter.setEnabled(True) 46 | self.ui.groupBox_custom_filter.setEnabled(False) 47 | elif selected == '自定义卷积核': 48 | self.ui.groupBox_sobel_filter.setEnabled(False) 49 | self.ui.groupBox_laplace_filter.setEnabled(False) 50 | self.ui.groupBox_custom_filter.setEnabled(True) 51 | 52 | def open_file(self): 53 | file_path, file_type = QFileDialog.getOpenFileName(QFileDialog(), '选择图片', '', '图像文件(*.jpg *.bmp *.png)') 54 | self.cv_srcImage = cv2.imread(file_path) 55 | height, width, channels = self.cv_srcImage.shape 56 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 57 | if width > height: 58 | ui_image = ui_image.scaledToWidth(self.ui.label_image_1.width()) 59 | else: 60 | ui_image = ui_image.scaledToHeight(self.ui.label_image_1.height()) 61 | self.ui.label_image_1.setPixmap(QPixmap.fromImage(ui_image)) 62 | 63 | def sobel_sharpen_filter(self): 64 | def _sobel_sharpen_filter(image, mode=0): 65 | copyImage = image.copy() 66 | if copyImage.ndim == 3: 67 | copyImage = cv2.cvtColor(copyImage, cv2.COLOR_BGR2GRAY) 68 | if mode == 1: 69 | x = cv2.Sobel(copyImage, ddepth=cv2.CV_16S, dx=1, dy=0) 70 | x = cv2.convertScaleAbs(x) 71 | return x 72 | elif mode == 2: 73 | y = cv2.Sobel(copyImage, ddepth=cv2.CV_16S, dx=0, dy=1) 74 | y = cv2.convertScaleAbs(y) 75 | return y 76 | elif mode == 0: 77 | x = cv2.Sobel(copyImage, ddepth=cv2.CV_16S, dx=1, dy=0) 78 | x = cv2.convertScaleAbs(x) 79 | y = cv2.Sobel(copyImage, ddepth=cv2.CV_16S, dx=0, dy=1) 80 | y = cv2.convertScaleAbs(y) 81 | x_y = cv2.addWeighted(x, 0.5, y, 0.5, 0) 82 | return x_y 83 | mode = 0 84 | if self.ui.radioButton_sobel_dx.isChecked(): 85 | mode = 1 86 | elif self.ui.radioButton_sobel_dy.isChecked(): 87 | mode = 2 88 | elif self.ui.radioButton_sobel_dx_dy.isChecked(): 89 | mode = 0 90 | self.cv_sharpenImage = _sobel_sharpen_filter(image=self.cv_srcImage, mode=mode) 91 | height, width = self.cv_sharpenImage.shape 92 | ui_image = QImage(cv2.cvtColor(self.cv_sharpenImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 93 | if width > height: 94 | ui_image = ui_image.scaledToWidth(self.ui.label_image_2.width()) 95 | else: 96 | ui_image = ui_image.scaledToHeight(self.ui.label_image_2.height()) 97 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 98 | 99 | def laplacian_sharpen_filter(self): 100 | def _laplacian_sharpen_filter(image, size=1): 101 | copyImage = image.copy() 102 | if copyImage.ndim == 3: 103 | copyImage = cv2.cvtColor(copyImage, cv2.COLOR_BGR2GRAY) 104 | copyImage = cv2.Laplacian(copyImage, ddepth=cv2.CV_16S, ksize=int(size)) 105 | copyImage = cv2.convertScaleAbs(copyImage) 106 | return copyImage 107 | size = self.ui.spinBox_laplace_ksize.value() 108 | self.cv_sharpenImage = _laplacian_sharpen_filter(image=self.cv_srcImage, size=size) 109 | height, width = self.cv_sharpenImage.shape 110 | ui_image = QImage(cv2.cvtColor(self.cv_sharpenImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 111 | if width > height: 112 | ui_image = ui_image.scaledToWidth(self.ui.label_image_2.width()) 113 | else: 114 | ui_image = ui_image.scaledToHeight(self.ui.label_image_2.height()) 115 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 116 | 117 | def custom_filter(self): 118 | def _custom_filter(image, custom_kernel=None): 119 | if custom_kernel is None: 120 | kernel = np.array([[0, -1.5, 0], [-1.5, 7, -1.5], [0, -1.5, 0]], np.float) 121 | else: 122 | kernel = np.array([[custom_kernel[0], custom_kernel[1], custom_kernel[2]], 123 | [custom_kernel[3], custom_kernel[4], custom_kernel[5]], 124 | [custom_kernel[6], custom_kernel[7], custom_kernel[8]]], 125 | np.float) 126 | dst = cv2.filter2D(src=image, ddepth=cv2.CV_16S, kernel=kernel) 127 | dst = cv2.convertScaleAbs(dst) 128 | return dst 129 | custom_kernel = [self.ui.doubleSpinBox_custom_filter_1.value(), self.ui.doubleSpinBox_custom_filter_2.value(), self.ui.doubleSpinBox_custom_filter_3.value(), 130 | self.ui.doubleSpinBox_custom_filter_4.value(), self.ui.doubleSpinBox_custom_filter_5.value(), self.ui.doubleSpinBox_custom_filter_6.value(), 131 | self.ui.doubleSpinBox_custom_filter_7.value(), self.ui.doubleSpinBox_custom_filter_8.value(), self.ui.doubleSpinBox_custom_filter_9.value()] 132 | self.cv_sharpenImage = _custom_filter(image=self.cv_srcImage, custom_kernel=custom_kernel) 133 | height, width = self.cv_sharpenImage.shape[0], self.cv_sharpenImage.shape[1] 134 | ui_image = QImage(cv2.cvtColor(self.cv_sharpenImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 135 | if width > height: 136 | ui_image = ui_image.scaledToWidth(self.ui.label_image_2.width()) 137 | else: 138 | ui_image = ui_image.scaledToHeight(self.ui.label_image_2.height()) 139 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 140 | -------------------------------------------------------------------------------- /sub_windows/sub_window_5.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import numpy as np 3 | from PyQt5.QtGui import * 4 | from PyQt5.QtWidgets import * 5 | 6 | # 子窗口布局 7 | from sub_windows import ui_sub_window_5 8 | 9 | 10 | class SubWindow(QMainWindow): 11 | def __init__(self): 12 | super().__init__(parent=None) 13 | self.ui = ui_sub_window_5.Ui_Form() 14 | self.ui.setupUi(self) 15 | self.ui_init() 16 | self.cv_srcImage = None 17 | self.cv_equImage = None 18 | 19 | def ui_init(self): 20 | self.ui.pushButton_open_file.clicked.connect(self.open_file) 21 | self.ui.pushButton_brightness_change.clicked.connect(self.brightness_change) 22 | self.ui.pushButton_hist_equ.clicked.connect(self.hist_equ) 23 | pass 24 | 25 | def open_file(self): 26 | file_path, file_type = QFileDialog.getOpenFileName(QFileDialog(), '选择图片', '', '图像文件(*.jpg *.bmp *.png)') 27 | self.cv_srcImage = cv2.imread(file_path) 28 | print(self.cv_srcImage.shape) 29 | height, width = self.cv_srcImage.shape[0], self.cv_srcImage.shape[1] 30 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 31 | if width > height: 32 | ui_image = ui_image.scaledToWidth(self.ui.label_image_1.width()) 33 | else: 34 | ui_image = ui_image.scaledToHeight(self.ui.label_image_1.height()) 35 | self.ui.label_image_1.setPixmap(QPixmap.fromImage(ui_image)) 36 | self._show_hist_image(flag=1) 37 | 38 | def brightness_change(self): 39 | def _brightness_change(image, p=0): 40 | copyImage = image.copy() 41 | copyImage = np.array(copyImage, dtype=np.uint16) 42 | copyImage = copyImage + p 43 | copyImage = np.clip(copyImage, 0, 255) 44 | copyImage = np.array(copyImage, dtype=np.uint8) 45 | return copyImage 46 | self.cv_equImage = _brightness_change(image=self.cv_srcImage, p=self.ui.spinBox_brightness_change.value()) 47 | height, width = self.cv_equImage.shape[0], self.cv_equImage.shape[1] 48 | ui_image = QImage(cv2.cvtColor(self.cv_equImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 49 | if width > height: 50 | ui_image = ui_image.scaledToWidth(self.ui.label_image_2.width()) 51 | else: 52 | ui_image = ui_image.scaledToHeight(self.ui.label_image_2.height()) 53 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 54 | self._show_hist_image(flag=2) 55 | 56 | def hist_equ(self): 57 | def _his_equ(image): 58 | copyImage = image.copy() 59 | if copyImage.ndim == 3: 60 | ycrcbImage = cv2.cvtColor(copyImage, cv2.COLOR_BGR2YCR_CB) 61 | channels = cv2.split(ycrcbImage) 62 | channels[0] = cv2.equalizeHist(src=channels[0]) 63 | ycrcbImage = cv2.merge([channels[0], channels[1], channels[2]]) 64 | copyImage = cv2.cvtColor(ycrcbImage, cv2.COLOR_YCR_CB2BGR) 65 | return copyImage 66 | elif copyImage.ndim == 2: 67 | copyImage = cv2.equalizeHist(src=copyImage) 68 | return copyImage 69 | self.cv_equImage = _his_equ(image=self.cv_srcImage) 70 | height, width = self.cv_equImage.shape[0], self.cv_equImage.shape[1] 71 | ui_image = QImage(cv2.cvtColor(self.cv_equImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 72 | if width > height: 73 | ui_image = ui_image.scaledToWidth(self.ui.label_image_2.width()) 74 | else: 75 | ui_image = ui_image.scaledToHeight(self.ui.label_image_2.height()) 76 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 77 | self._show_hist_image(flag=2) 78 | 79 | def _show_hist_image(self, flag=1): 80 | if flag == 1: 81 | histImg = self._calc_gray_hist(image=self.cv_srcImage) 82 | width, height = histImg.shape[0], histImg.shape[1] 83 | ui_image = QImage(cv2.cvtColor(histImg, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 84 | self.ui.label_image_3.setPixmap(QPixmap.fromImage(ui_image)) 85 | elif flag == 2: 86 | histImg = self._calc_gray_hist(image=self.cv_equImage) 87 | width, height = histImg.shape[0], histImg.shape[1] 88 | ui_image = QImage(cv2.cvtColor(histImg, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 89 | self.ui.label_image_4.setPixmap(QPixmap.fromImage(ui_image)) 90 | 91 | def _calc_gray_hist(self, image): 92 | copyImage = image.copy() 93 | if copyImage.ndim == 3: 94 | copyImage = cv2.cvtColor(copyImage, cv2.COLOR_BGR2GRAY) 95 | histArray = cv2.calcHist([copyImage], [0], None, [256], [0, 255]) # 统计数组 96 | mnVal, maxVal, minLoc, macLoc = cv2.minMaxLoc(histArray) # 找最大值 97 | histImg = np.zeros([256, 256, 3], np.uint8) 98 | hpt = int(0.9 * 256) # 预留顶部空间 99 | for i in range(256): 100 | intensity = int(histArray[i] * hpt / maxVal) # 柱状图高度 101 | cv2.line(histImg, (i, 256), (i, 256 - intensity), [255, 255, 255]) # 画线 102 | return histImg 103 | -------------------------------------------------------------------------------- /sub_windows/sub_window_6.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import numpy as np 3 | from PyQt5.QtGui import * 4 | from PyQt5.QtWidgets import * 5 | 6 | # 子窗口布局 7 | from sub_windows import ui_sub_window_6 8 | 9 | 10 | class SubWindow(QMainWindow): 11 | def __init__(self): 12 | super().__init__(parent=None) 13 | self.ui = ui_sub_window_6.Ui_Form() 14 | self.ui.setupUi(self) 15 | self.cv_srcImage = None 16 | self.saveImage = None 17 | self.ui_init() 18 | 19 | def ui_init(self): 20 | self.ui.pushButton_open_file.clicked.connect(self.open_file) 21 | self.ui.pushButton_dct_process.clicked.connect(self.dct_process) 22 | self.ui.pushButton_save.clicked.connect(self.save) 23 | 24 | def open_file(self): 25 | file_path, file_type = QFileDialog.getOpenFileName(QFileDialog(), '选择图片', '', '图像文件(*.jpg *.bmp *.png)') 26 | self.cv_srcImage = cv2.imread(file_path) 27 | height, width = self.cv_srcImage.shape[0], self.cv_srcImage.shape[1] 28 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 29 | if width > height: 30 | ui_image = ui_image.scaledToWidth(self.ui.label_image_1.width()) 31 | else: 32 | ui_image = ui_image.scaledToHeight(self.ui.label_image_1.height()) 33 | self.ui.label_image_1.setPixmap(QPixmap.fromImage(ui_image)) 34 | 35 | def dct_process(self): 36 | if self.cv_srcImage is None: 37 | return 38 | # 判断radio 39 | mask_flag = 6 40 | if self.ui.radioButton_s1.isChecked(): 41 | print('s1') 42 | mask_flag = 1 43 | elif self.ui.radioButton_s3.isChecked(): 44 | print('s3') 45 | mask_flag = 3 46 | elif self.ui.radioButton_s6.isChecked(): 47 | print('s6') 48 | mask_flag = 6 49 | elif self.ui.radioButton_s10.isChecked(): 50 | print('s10') 51 | mask_flag = 10 52 | elif self.ui.radioButton_s15.isChecked(): 53 | print('s15') 54 | mask_flag = 15 55 | elif self.ui.radioButton_s21.isChecked(): 56 | print('s21') 57 | mask_flag = 21 58 | # DCT处理 59 | compressImage = self._dct_test(image=self.cv_srcImage, block=8, mask_flag=mask_flag) 60 | self.saveImage = compressImage.copy() 61 | height, width = compressImage.shape[0], compressImage.shape[1] 62 | ui_image = QImage(cv2.cvtColor(compressImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 63 | if width > height: 64 | ui_image = ui_image.scaledToWidth(self.ui.label_image_1.width()) 65 | else: 66 | ui_image = ui_image.scaledToHeight(self.ui.label_image_1.height()) 67 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 68 | 69 | def _dct_test(self, image, block=8, mask_flag=10): 70 | mask_21 = np.uint8([[1, 1, 1, 1, 1, 1, 0, 0], 71 | [1, 1, 1, 1, 1, 0, 0, 0], 72 | [1, 1, 1, 1, 0, 0, 0, 0], 73 | [1, 1, 1, 0, 0, 0, 0, 0], 74 | [1, 1, 0, 0, 0, 0, 0, 0], 75 | [1, 0, 0, 0, 0, 0, 0, 0], 76 | [0, 0, 0, 0, 0, 0, 0, 0], 77 | [0, 0, 0, 0, 0, 0, 0, 0]]) 78 | mask_15 = np.uint8([[1, 1, 1, 1, 1, 0, 0, 0], 79 | [1, 1, 1, 1, 0, 0, 0, 0], 80 | [1, 1, 1, 0, 0, 0, 0, 0], 81 | [1, 1, 0, 0, 0, 0, 0, 0], 82 | [1, 0, 0, 0, 0, 0, 0, 0], 83 | [0, 0, 0, 0, 0, 0, 0, 0], 84 | [0, 0, 0, 0, 0, 0, 0, 0], 85 | [0, 0, 0, 0, 0, 0, 0, 0]]) 86 | mask_10 = np.uint8([[1, 1, 1, 1, 0, 0, 0, 0], 87 | [1, 1, 1, 0, 0, 0, 0, 0], 88 | [1, 1, 0, 0, 0, 0, 0, 0], 89 | [1, 0, 0, 0, 0, 0, 0, 0], 90 | [0, 0, 0, 0, 0, 0, 0, 0], 91 | [0, 0, 0, 0, 0, 0, 0, 0], 92 | [0, 0, 0, 0, 0, 0, 0, 0], 93 | [0, 0, 0, 0, 0, 0, 0, 0]]) 94 | mask_6 = np.uint8([[1, 1, 1, 0, 0, 0, 0, 0], 95 | [1, 1, 0, 0, 0, 0, 0, 0], 96 | [1, 0, 0, 0, 0, 0, 0, 0], 97 | [0, 0, 0, 0, 0, 0, 0, 0], 98 | [0, 0, 0, 0, 0, 0, 0, 0], 99 | [0, 0, 0, 0, 0, 0, 0, 0], 100 | [0, 0, 0, 0, 0, 0, 0, 0], 101 | [0, 0, 0, 0, 0, 0, 0, 0]]) 102 | mask_3 = np.uint8([[1, 1, 0, 0, 0, 0, 0, 0], 103 | [1, 0, 0, 0, 0, 0, 0, 0], 104 | [0, 0, 0, 0, 0, 0, 0, 0], 105 | [0, 0, 0, 0, 0, 0, 0, 0], 106 | [0, 0, 0, 0, 0, 0, 0, 0], 107 | [0, 0, 0, 0, 0, 0, 0, 0], 108 | [0, 0, 0, 0, 0, 0, 0, 0], 109 | [0, 0, 0, 0, 0, 0, 0, 0]]) 110 | mask_1 = np.uint8([[1, 0, 0, 0, 0, 0, 0, 0], 111 | [0, 0, 0, 0, 0, 0, 0, 0], 112 | [0, 0, 0, 0, 0, 0, 0, 0], 113 | [0, 0, 0, 0, 0, 0, 0, 0], 114 | [0, 0, 0, 0, 0, 0, 0, 0], 115 | [0, 0, 0, 0, 0, 0, 0, 0], 116 | [0, 0, 0, 0, 0, 0, 0, 0], 117 | [0, 0, 0, 0, 0, 0, 0, 0]]) 118 | mask = mask_10 119 | if mask_flag == 1: 120 | mask = mask_1 121 | elif mask_flag == 3: 122 | mask = mask_3 123 | elif mask_flag == 6: 124 | mask = mask_6 125 | elif mask_flag == 10: 126 | mask = mask_10 127 | elif mask_flag == 15: 128 | mask = mask_15 129 | elif mask_flag == 21: 130 | mask = mask_21 131 | 132 | srcImage = cv2.cvtColor(image.copy(), cv2.COLOR_BGR2YUV) 133 | retImage = np.zeros( 134 | ((srcImage.shape[0] // block + 1) * block, (srcImage.shape[1] // block + 1) * block, srcImage.ndim), 135 | np.float32) 136 | channels = cv2.split(srcImage) 137 | Y_channel_float = np.array(channels[0], dtype=np.float32) 138 | U_channel_float = np.array(channels[1], dtype=np.float32) 139 | V_channel_float = np.array(channels[2], dtype=np.float32) 140 | retImage[0: Y_channel_float.shape[0], 0: Y_channel_float.shape[1], 0] = Y_channel_float 141 | retImage[0: U_channel_float.shape[0], 0: U_channel_float.shape[1], 1] = U_channel_float 142 | retImage[0: V_channel_float.shape[0], 0: V_channel_float.shape[1], 2] = V_channel_float 143 | 144 | T = np.zeros((block, block), np.float64) 145 | T[0, :] = 1 * np.sqrt(1 / block) 146 | for i in range(1, block): 147 | for j in range(0, block): 148 | T[i, j] = np.cos(np.pi * i * (2 * j + 1) / (2 * block)) * np.sqrt(2 / block) 149 | 150 | for y_offset in range(int(retImage.shape[0] / block)): 151 | for x_offset in range(int(retImage.shape[1] / block)): 152 | for c in range(int(retImage.ndim)): 153 | # opencv的方法 154 | # subImg = retImage[y_offset * block: y_offset * block + block, x_offset * block: x_offset * block + block, c] 155 | # subImg = cv2.dct(subImg) * mask 156 | # subImg = cv2.idct(subImg) 157 | # retImage[y_offset * block: y_offset * block + block, x_offset * block: x_offset * block + block, c] = subImg 158 | # 自建的方法 159 | subImg = retImage[y_offset * block: y_offset * block + block, 160 | x_offset * block: x_offset * block + block, c] 161 | dctImg = np.dot(np.dot(T, subImg), np.transpose(T)) * mask 162 | subImg = np.dot(np.dot(np.transpose(T), dctImg), T) 163 | retImage[y_offset * block: y_offset * block + block, x_offset * block: x_offset * block + block, 164 | c] = subImg 165 | retImage = cv2.cvtColor(np.uint8(retImage), cv2.COLOR_YUV2BGR) 166 | retImage = retImage[0: srcImage.shape[0], 0: srcImage.shape[1]] 167 | return retImage 168 | 169 | def save(self): 170 | if self.saveImage is None: 171 | return 172 | jpg_image = cv2.imencode('.jpg', self.saveImage)[1] 173 | fp = open('.././dctCompressImage.jpg', 'wb') 174 | fp.write(jpg_image) 175 | fp.close() 176 | print('ok') 177 | 178 | 179 | 180 | -------------------------------------------------------------------------------- /sub_windows/sub_window_7.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | from PyQt5.QtGui import * 3 | from PyQt5.QtWidgets import * 4 | 5 | # 子窗口布局 6 | from sub_windows import ui_sub_window_7 7 | 8 | 9 | class SubWindow(QMainWindow): 10 | def __init__(self): 11 | super().__init__(parent=None) 12 | self.ui = ui_sub_window_7.Ui_Form() 13 | self.ui.setupUi(self) 14 | self.cv_srcImage = None 15 | self.ui_init() 16 | 17 | def ui_init(self): 18 | self.ui.pushButton_open_file.clicked.connect(self.open_file) 19 | self.ui.pushButton_canny.clicked.connect(self.canny_process) 20 | 21 | def open_file(self): 22 | file_path, file_type = QFileDialog.getOpenFileName(QFileDialog(), '选择图片', '', '图像文件(*.jpg *.bmp *.png)') 23 | self.cv_srcImage = cv2.imread(file_path) 24 | height, width = self.cv_srcImage.shape[0], self.cv_srcImage.shape[1] 25 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 26 | if width > height: 27 | ui_image = ui_image.scaledToWidth(self.ui.label_image_1.width()) 28 | else: 29 | ui_image = ui_image.scaledToHeight(self.ui.label_image_1.height()) 30 | self.ui.label_image_1.setPixmap(QPixmap.fromImage(ui_image)) 31 | 32 | def canny_process(self): 33 | if self.cv_srcImage is None: 34 | return 35 | low_th = int(self.ui.spinBox_low_th.value()) 36 | high_th = int(self.ui.spinBox_high_th.value()) 37 | edgeImg = cv2.Canny(self.cv_srcImage.copy(), low_th, high_th) 38 | height, width = edgeImg.shape[0], edgeImg.shape[1] 39 | ui_image = QImage(cv2.cvtColor(edgeImg, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 40 | if width > height: 41 | ui_image = ui_image.scaledToWidth(self.ui.label_image_1.width()) 42 | else: 43 | ui_image = ui_image.scaledToHeight(self.ui.label_image_1.height()) 44 | self.ui.label_image_2.setPixmap(QPixmap.fromImage(ui_image)) 45 | -------------------------------------------------------------------------------- /sub_windows/sub_window_8.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | from PyQt5.QtCore import pyqtSignal, QThread 3 | from PyQt5.QtGui import * 4 | from PyQt5.QtWidgets import * 5 | 6 | # 子窗口布局 7 | from sub_windows import ui_sub_window_8 8 | 9 | 10 | class SubWindow(QMainWindow): 11 | def __init__(self): 12 | super().__init__(parent=None) 13 | self.ui = ui_sub_window_8.Ui_Form() 14 | self.ui.setupUi(self) 15 | self.FaceDetect_ = None 16 | self.ui_init() 17 | self.face_cascade = cv2.CascadeClassifier('./static/cascade.xml') 18 | 19 | def ui_init(self): 20 | self.ui.pushButton_video_captrue.clicked.connect(self.video_captrue) 21 | self.ui.pushButton_open_file.clicked.connect(self.open_file) 22 | self.FaceDetect_ = FaceDetect() 23 | self.FaceDetect_.DetectOneFrame.connect(self.update_frame_to_label) 24 | 25 | def open_file(self): 26 | file_path, file_type = QFileDialog.getOpenFileName(QFileDialog(), '选择图片', '', '图像文件(*.jpg *.bmp *.png)') 27 | self.cv_srcImage = cv2.imread(file_path) 28 | gray = cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2GRAY) 29 | faces = self.face_cascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=5, minSize=(5, 5)) 30 | for (x, y, w, h) in faces: 31 | cv2.rectangle(self.cv_srcImage, (x, y), (x + w, y + w), (0, 255, 0), 5) 32 | height, width = self.cv_srcImage.shape[0], self.cv_srcImage.shape[1] 33 | ui_image = QImage(cv2.cvtColor(self.cv_srcImage, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 34 | if width > height: 35 | ui_image = ui_image.scaledToWidth(self.ui.label_image_1.width()) 36 | else: 37 | ui_image = ui_image.scaledToHeight(self.ui.label_image_1.height()) 38 | self.ui.label_image_1.setPixmap(QPixmap.fromImage(ui_image)) 39 | 40 | 41 | def video_captrue(self): 42 | if not self.FaceDetect_.working: 43 | self.FaceDetect_.working = True 44 | self.FaceDetect_.start() 45 | else: 46 | self.FaceDetect_.working = None 47 | self.ui.label_image_1.setText('停止捕捉') 48 | 49 | def update_frame_to_label(self, frame): 50 | self.ui.label_image_1.setPixmap(QPixmap.fromImage(frame)) 51 | 52 | 53 | class FaceDetect(QThread): 54 | DetectOneFrame = pyqtSignal(QImage) 55 | 56 | def __init__(self): 57 | super().__init__() 58 | self.working = None 59 | 60 | def run(self): 61 | face_cascade = cv2.CascadeClassifier('./static/cascade.xml') 62 | capture = cv2.VideoCapture(0) 63 | while self.working: 64 | ret, frame_color = capture.read() 65 | (height, width, channels) = frame_color.shape 66 | frame_color = cv2.flip(frame_color, flipCode=1) # 镜像 67 | gray = cv2.cvtColor(frame_color, cv2.COLOR_BGR2GRAY) 68 | faces = face_cascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=5, minSize=(5, 5)) 69 | for (x, y, w, h) in faces: 70 | cv2.rectangle(frame_color, (x, y), (x + w, y + w), (255, 255, 0), 4) 71 | ui_image = QImage(cv2.cvtColor(frame_color, cv2.COLOR_BGR2RGB), width, height, QImage.Format_RGB888) 72 | self.DetectOneFrame.emit(ui_image) 73 | capture.release() 74 | print('结束人脸检测') 75 | -------------------------------------------------------------------------------- /sub_windows/ui_sub_window_1.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_sub_window_1.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(1158, 789) 15 | self.label_title = QtWidgets.QLabel(Form) 16 | self.label_title.setGeometry(QtCore.QRect(810, 10, 321, 41)) 17 | font = QtGui.QFont() 18 | font.setFamily("Agency FB") 19 | font.setPointSize(22) 20 | font.setBold(True) 21 | font.setWeight(75) 22 | self.label_title.setFont(font) 23 | self.label_title.setAlignment(QtCore.Qt.AlignCenter) 24 | self.label_title.setObjectName("label_title") 25 | self.label_image = QtWidgets.QLabel(Form) 26 | self.label_image.setGeometry(QtCore.QRect(240, 60, 900, 700)) 27 | font = QtGui.QFont() 28 | font.setFamily("Agency FB") 29 | font.setPointSize(14) 30 | font.setBold(True) 31 | font.setWeight(75) 32 | self.label_image.setFont(font) 33 | self.label_image.setFrameShape(QtWidgets.QFrame.Box) 34 | self.label_image.setFrameShadow(QtWidgets.QFrame.Raised) 35 | self.label_image.setAlignment(QtCore.Qt.AlignCenter) 36 | self.label_image.setObjectName("label_image") 37 | self.pushButton_open_file = QtWidgets.QPushButton(Form) 38 | self.pushButton_open_file.setGeometry(QtCore.QRect(20, 20, 191, 28)) 39 | self.pushButton_open_file.setCheckable(False) 40 | self.pushButton_open_file.setDefault(True) 41 | self.pushButton_open_file.setObjectName("pushButton_open_file") 42 | self.groupBox = QtWidgets.QGroupBox(Form) 43 | self.groupBox.setGeometry(QtCore.QRect(10, 170, 221, 81)) 44 | self.groupBox.setObjectName("groupBox") 45 | self.pushButton_gray_convert = QtWidgets.QPushButton(self.groupBox) 46 | self.pushButton_gray_convert.setEnabled(False) 47 | self.pushButton_gray_convert.setGeometry(QtCore.QRect(50, 30, 121, 28)) 48 | self.pushButton_gray_convert.setObjectName("pushButton_gray_convert") 49 | self.groupBox_2 = QtWidgets.QGroupBox(Form) 50 | self.groupBox_2.setGeometry(QtCore.QRect(10, 290, 221, 101)) 51 | self.groupBox_2.setObjectName("groupBox_2") 52 | self.label_bin_convert_1 = QtWidgets.QLabel(self.groupBox_2) 53 | self.label_bin_convert_1.setGeometry(QtCore.QRect(20, 20, 91, 21)) 54 | self.label_bin_convert_1.setObjectName("label_bin_convert_1") 55 | self.pushButton_bin_convert = QtWidgets.QPushButton(self.groupBox_2) 56 | self.pushButton_bin_convert.setEnabled(False) 57 | self.pushButton_bin_convert.setGeometry(QtCore.QRect(50, 60, 121, 28)) 58 | self.pushButton_bin_convert.setObjectName("pushButton_bin_convert") 59 | self.spinBox_bin_threshold = QtWidgets.QSpinBox(self.groupBox_2) 60 | self.spinBox_bin_threshold.setGeometry(QtCore.QRect(135, 20, 61, 22)) 61 | self.spinBox_bin_threshold.setMaximum(255) 62 | self.spinBox_bin_threshold.setProperty("value", 127) 63 | self.spinBox_bin_threshold.setObjectName("spinBox_bin_threshold") 64 | self.layoutWidget = QtWidgets.QWidget(Form) 65 | self.layoutWidget.setGeometry(QtCore.QRect(40, 80, 149, 51)) 66 | self.layoutWidget.setObjectName("layoutWidget") 67 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget) 68 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0) 69 | self.horizontalLayout.setObjectName("horizontalLayout") 70 | self.label_color_space_1 = QtWidgets.QLabel(self.layoutWidget) 71 | self.label_color_space_1.setEnabled(False) 72 | font = QtGui.QFont() 73 | font.setFamily("Agency FB") 74 | font.setPointSize(9) 75 | self.label_color_space_1.setFont(font) 76 | self.label_color_space_1.setAlignment(QtCore.Qt.AlignCenter) 77 | self.label_color_space_1.setObjectName("label_color_space_1") 78 | self.horizontalLayout.addWidget(self.label_color_space_1) 79 | self.label_color_space_2 = QtWidgets.QLabel(self.layoutWidget) 80 | self.label_color_space_2.setEnabled(False) 81 | font = QtGui.QFont() 82 | font.setFamily("Agency FB") 83 | self.label_color_space_2.setFont(font) 84 | self.label_color_space_2.setText("") 85 | self.label_color_space_2.setAlignment(QtCore.Qt.AlignCenter) 86 | self.label_color_space_2.setObjectName("label_color_space_2") 87 | self.horizontalLayout.addWidget(self.label_color_space_2) 88 | self.pushButton_reset = QtWidgets.QPushButton(Form) 89 | self.pushButton_reset.setEnabled(False) 90 | self.pushButton_reset.setGeometry(QtCore.QRect(60, 430, 121, 28)) 91 | self.pushButton_reset.setObjectName("pushButton_reset") 92 | 93 | self.retranslateUi(Form) 94 | QtCore.QMetaObject.connectSlotsByName(Form) 95 | 96 | def retranslateUi(self, Form): 97 | _translate = QtCore.QCoreApplication.translate 98 | Form.setWindowTitle(_translate("Form", "图像色彩空间转换")) 99 | self.label_title.setText(_translate("Form", "图像色彩空间转换")) 100 | self.label_image.setText(_translate("Form", "图片将显示在这里")) 101 | self.pushButton_open_file.setText(_translate("Form", "打开图片")) 102 | self.groupBox.setTitle(_translate("Form", "灰度转换")) 103 | self.pushButton_gray_convert.setText(_translate("Form", "灰度转换")) 104 | self.groupBox_2.setTitle(_translate("Form", "二值化")) 105 | self.label_bin_convert_1.setText(_translate("Form", "设置阈值:")) 106 | self.pushButton_bin_convert.setText(_translate("Form", "二值化转换")) 107 | self.label_color_space_1.setText(_translate("Form", "当前色彩空间:")) 108 | self.pushButton_reset.setText(_translate("Form", "恢复默认")) 109 | 110 | -------------------------------------------------------------------------------- /sub_windows/ui_sub_window_10.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_sub_window_10.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(686, 524) 15 | self.label = QtWidgets.QLabel(Form) 16 | self.label.setGeometry(QtCore.QRect(210, 30, 271, 61)) 17 | font = QtGui.QFont() 18 | font.setFamily("黑体") 19 | font.setPointSize(12) 20 | self.label.setFont(font) 21 | self.label.setAlignment(QtCore.Qt.AlignCenter) 22 | self.label.setObjectName("label") 23 | self.textBrowser = QtWidgets.QTextBrowser(Form) 24 | self.textBrowser.setGeometry(QtCore.QRect(100, 110, 491, 261)) 25 | font = QtGui.QFont() 26 | font.setFamily("黑体") 27 | font.setPointSize(10) 28 | self.textBrowser.setFont(font) 29 | self.textBrowser.setFocusPolicy(QtCore.Qt.StrongFocus) 30 | self.textBrowser.setObjectName("textBrowser") 31 | self.label_2 = QtWidgets.QLabel(Form) 32 | self.label_2.setGeometry(QtCore.QRect(490, 430, 101, 41)) 33 | font = QtGui.QFont() 34 | font.setFamily("黑体") 35 | font.setPointSize(10) 36 | self.label_2.setFont(font) 37 | self.label_2.setObjectName("label_2") 38 | 39 | self.retranslateUi(Form) 40 | QtCore.QMetaObject.connectSlotsByName(Form) 41 | 42 | def retranslateUi(self, Form): 43 | _translate = QtCore.QCoreApplication.translate 44 | Form.setWindowTitle(_translate("Form", "关于本软件")) 45 | self.label.setText(_translate("Form", "1561130423-阳旭 的毕业设计")) 46 | self.textBrowser.setHtml(_translate("Form", "\n" 47 | "
\n" 50 | "本课题针对图像处理的难点,设计了一款界面友好的图像处理仿真系统,意在帮助初学者形象的理解图像处理所涉及的部分知识点。
\n" 51 | "该软件包含常见的图像处理实例,例如图像缩放、加噪、平滑锐化、直方图均衡、压缩编码,边缘检测、人脸检测等。这些模块涉及到较多图像处理知识,通过每个模块设计的实例,循序渐进的让初学者加深理解图像处理方法间的联系,激发初学者对图像处理的兴趣。
\n" 52 | "本设计利用PyCharm和QT Designer开发平台,基于Python编程语言以及OpenCV计算机视觉库,利用Qt5作为GUI框架,构建了一个兼容Windows-x86平台的软件。
")) 53 | self.label_2.setText(_translate("Form", "2019-06-03")) 54 | 55 | -------------------------------------------------------------------------------- /sub_windows/ui_sub_window_2.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_sub_window_2.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(1158, 779) 15 | self.label_title = QtWidgets.QLabel(Form) 16 | self.label_title.setGeometry(QtCore.QRect(850, 10, 281, 41)) 17 | font = QtGui.QFont() 18 | font.setFamily("Agency FB") 19 | font.setPointSize(22) 20 | font.setBold(True) 21 | font.setWeight(75) 22 | self.label_title.setFont(font) 23 | self.label_title.setAlignment(QtCore.Qt.AlignCenter) 24 | self.label_title.setObjectName("label_title") 25 | self.label_image = QtWidgets.QLabel(Form) 26 | self.label_image.setGeometry(QtCore.QRect(240, 60, 900, 700)) 27 | font = QtGui.QFont() 28 | font.setFamily("Agency FB") 29 | font.setPointSize(14) 30 | font.setBold(True) 31 | font.setWeight(75) 32 | self.label_image.setFont(font) 33 | self.label_image.setFrameShape(QtWidgets.QFrame.Box) 34 | self.label_image.setFrameShadow(QtWidgets.QFrame.Raised) 35 | self.label_image.setAlignment(QtCore.Qt.AlignCenter) 36 | self.label_image.setObjectName("label_image") 37 | self.pushButton_open_file = QtWidgets.QPushButton(Form) 38 | self.pushButton_open_file.setGeometry(QtCore.QRect(20, 20, 191, 28)) 39 | self.pushButton_open_file.setCheckable(False) 40 | self.pushButton_open_file.setDefault(True) 41 | self.pushButton_open_file.setObjectName("pushButton_open_file") 42 | self.groupBox = QtWidgets.QGroupBox(Form) 43 | self.groupBox.setGeometry(QtCore.QRect(10, 70, 211, 191)) 44 | self.groupBox.setObjectName("groupBox") 45 | self.verticalLayoutWidget = QtWidgets.QWidget(self.groupBox) 46 | self.verticalLayoutWidget.setGeometry(QtCore.QRect(30, 20, 151, 151)) 47 | self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") 48 | self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) 49 | self.verticalLayout.setContentsMargins(0, 0, 0, 0) 50 | self.verticalLayout.setObjectName("verticalLayout") 51 | self.horizontalLayout = QtWidgets.QHBoxLayout() 52 | self.horizontalLayout.setObjectName("horizontalLayout") 53 | self.label_zoom_factor_1 = QtWidgets.QLabel(self.verticalLayoutWidget) 54 | self.label_zoom_factor_1.setEnabled(False) 55 | font = QtGui.QFont() 56 | font.setFamily("Agency FB") 57 | font.setPointSize(9) 58 | self.label_zoom_factor_1.setFont(font) 59 | self.label_zoom_factor_1.setAlignment(QtCore.Qt.AlignCenter) 60 | self.label_zoom_factor_1.setObjectName("label_zoom_factor_1") 61 | self.horizontalLayout.addWidget(self.label_zoom_factor_1) 62 | self.label_zoom_factor_2 = QtWidgets.QLabel(self.verticalLayoutWidget) 63 | self.label_zoom_factor_2.setEnabled(False) 64 | font = QtGui.QFont() 65 | font.setFamily("Agency FB") 66 | self.label_zoom_factor_2.setFont(font) 67 | self.label_zoom_factor_2.setText("") 68 | self.label_zoom_factor_2.setAlignment(QtCore.Qt.AlignCenter) 69 | self.label_zoom_factor_2.setObjectName("label_zoom_factor_2") 70 | self.horizontalLayout.addWidget(self.label_zoom_factor_2) 71 | self.verticalLayout.addLayout(self.horizontalLayout) 72 | self.pushButton_zoom_in = QtWidgets.QPushButton(self.verticalLayoutWidget) 73 | self.pushButton_zoom_in.setObjectName("pushButton_zoom_in") 74 | self.verticalLayout.addWidget(self.pushButton_zoom_in) 75 | self.pushButton_zoom_out = QtWidgets.QPushButton(self.verticalLayoutWidget) 76 | self.pushButton_zoom_out.setObjectName("pushButton_zoom_out") 77 | self.verticalLayout.addWidget(self.pushButton_zoom_out) 78 | self.pushButton_zoom_reset = QtWidgets.QPushButton(self.verticalLayoutWidget) 79 | self.pushButton_zoom_reset.setObjectName("pushButton_zoom_reset") 80 | self.verticalLayout.addWidget(self.pushButton_zoom_reset) 81 | self.groupBox_2 = QtWidgets.QGroupBox(Form) 82 | self.groupBox_2.setGeometry(QtCore.QRect(10, 290, 211, 251)) 83 | self.groupBox_2.setObjectName("groupBox_2") 84 | self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.groupBox_2) 85 | self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(10, 30, 191, 151)) 86 | self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2") 87 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2) 88 | self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) 89 | self.verticalLayout_2.setObjectName("verticalLayout_2") 90 | self.label_srcImage_size = QtWidgets.QLabel(self.verticalLayoutWidget_2) 91 | self.label_srcImage_size.setEnabled(False) 92 | font = QtGui.QFont() 93 | font.setFamily("Agency FB") 94 | font.setPointSize(9) 95 | self.label_srcImage_size.setFont(font) 96 | self.label_srcImage_size.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) 97 | self.label_srcImage_size.setObjectName("label_srcImage_size") 98 | self.verticalLayout_2.addWidget(self.label_srcImage_size) 99 | self.horizontalLayout_5 = QtWidgets.QHBoxLayout() 100 | self.horizontalLayout_5.setObjectName("horizontalLayout_5") 101 | self.label_1 = QtWidgets.QLabel(self.verticalLayoutWidget_2) 102 | font = QtGui.QFont() 103 | font.setFamily("Agency FB") 104 | font.setPointSize(9) 105 | self.label_1.setFont(font) 106 | self.label_1.setObjectName("label_1") 107 | self.horizontalLayout_5.addWidget(self.label_1) 108 | self.spinBox_anchor_x = QtWidgets.QSpinBox(self.verticalLayoutWidget_2) 109 | self.spinBox_anchor_x.setMaximum(99) 110 | self.spinBox_anchor_x.setObjectName("spinBox_anchor_x") 111 | self.horizontalLayout_5.addWidget(self.spinBox_anchor_x) 112 | self.spinBox_anchor_y = QtWidgets.QSpinBox(self.verticalLayoutWidget_2) 113 | self.spinBox_anchor_y.setMaximum(99) 114 | self.spinBox_anchor_y.setObjectName("spinBox_anchor_y") 115 | self.horizontalLayout_5.addWidget(self.spinBox_anchor_y) 116 | self.verticalLayout_2.addLayout(self.horizontalLayout_5) 117 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout() 118 | self.horizontalLayout_4.setObjectName("horizontalLayout_4") 119 | self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget_2) 120 | font = QtGui.QFont() 121 | font.setFamily("Agency FB") 122 | font.setPointSize(9) 123 | self.label_2.setFont(font) 124 | self.label_2.setObjectName("label_2") 125 | self.horizontalLayout_4.addWidget(self.label_2) 126 | self.spinBox_X_offset = QtWidgets.QSpinBox(self.verticalLayoutWidget_2) 127 | self.spinBox_X_offset.setMaximum(99) 128 | self.spinBox_X_offset.setObjectName("spinBox_X_offset") 129 | self.horizontalLayout_4.addWidget(self.spinBox_X_offset) 130 | self.verticalLayout_2.addLayout(self.horizontalLayout_4) 131 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout() 132 | self.horizontalLayout_2.setObjectName("horizontalLayout_2") 133 | self.label_left_2 = QtWidgets.QLabel(self.verticalLayoutWidget_2) 134 | font = QtGui.QFont() 135 | font.setFamily("Agency FB") 136 | font.setPointSize(9) 137 | self.label_left_2.setFont(font) 138 | self.label_left_2.setObjectName("label_left_2") 139 | self.horizontalLayout_2.addWidget(self.label_left_2) 140 | self.spinBox_Y_offset = QtWidgets.QSpinBox(self.verticalLayoutWidget_2) 141 | self.spinBox_Y_offset.setObjectName("spinBox_Y_offset") 142 | self.horizontalLayout_2.addWidget(self.spinBox_Y_offset) 143 | self.verticalLayout_2.addLayout(self.horizontalLayout_2) 144 | self.pushButton_screenshot = QtWidgets.QPushButton(self.groupBox_2) 145 | self.pushButton_screenshot.setGeometry(QtCore.QRect(20, 200, 171, 28)) 146 | self.pushButton_screenshot.setObjectName("pushButton_screenshot") 147 | 148 | self.retranslateUi(Form) 149 | QtCore.QMetaObject.connectSlotsByName(Form) 150 | 151 | def retranslateUi(self, Form): 152 | _translate = QtCore.QCoreApplication.translate 153 | Form.setWindowTitle(_translate("Form", "图像的缩放与裁切")) 154 | self.label_title.setText(_translate("Form", "图像缩放与裁切")) 155 | self.label_image.setText(_translate("Form", "图片将显示在这里")) 156 | self.pushButton_open_file.setText(_translate("Form", "打开图片")) 157 | self.groupBox.setTitle(_translate("Form", "缩放控制")) 158 | self.label_zoom_factor_1.setText(_translate("Form", "缩放系数:")) 159 | self.pushButton_zoom_in.setText(_translate("Form", "放大")) 160 | self.pushButton_zoom_out.setText(_translate("Form", "缩小")) 161 | self.pushButton_zoom_reset.setText(_translate("Form", "默认大小")) 162 | self.groupBox_2.setTitle(_translate("Form", "裁切控制")) 163 | self.label_srcImage_size.setText(_translate("Form", "原图X轴*Y轴:")) 164 | self.label_1.setText(_translate("Form", "锚点坐标")) 165 | self.label_2.setText(_translate("Form", "X轴偏移")) 166 | self.label_left_2.setText(_translate("Form", "Y轴偏移")) 167 | self.pushButton_screenshot.setText(_translate("Form", "图片裁切")) 168 | 169 | -------------------------------------------------------------------------------- /sub_windows/ui_sub_window_3.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_sub_window_3.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(1334, 770) 15 | self.groupBox = QtWidgets.QGroupBox(Form) 16 | self.groupBox.setGeometry(QtCore.QRect(650, 20, 361, 201)) 17 | self.groupBox.setTitle("") 18 | self.groupBox.setObjectName("groupBox") 19 | self.groupBox_median_blur_filter = QtWidgets.QGroupBox(self.groupBox) 20 | self.groupBox_median_blur_filter.setGeometry(QtCore.QRect(10, 100, 161, 91)) 21 | font = QtGui.QFont() 22 | font.setFamily("Agency FB") 23 | font.setPointSize(8) 24 | self.groupBox_median_blur_filter.setFont(font) 25 | self.groupBox_median_blur_filter.setObjectName("groupBox_median_blur_filter") 26 | self.label_title_3 = QtWidgets.QLabel(self.groupBox_median_blur_filter) 27 | self.label_title_3.setGeometry(QtCore.QRect(10, 20, 51, 21)) 28 | self.label_title_3.setObjectName("label_title_3") 29 | self.spinBox_median_ksize = QtWidgets.QSpinBox(self.groupBox_median_blur_filter) 30 | self.spinBox_median_ksize.setGeometry(QtCore.QRect(100, 20, 46, 22)) 31 | self.spinBox_median_ksize.setMinimum(3) 32 | self.spinBox_median_ksize.setSingleStep(2) 33 | self.spinBox_median_ksize.setProperty("value", 3) 34 | self.spinBox_median_ksize.setObjectName("spinBox_median_ksize") 35 | self.pushButton_median_blur_filter = QtWidgets.QPushButton(self.groupBox_median_blur_filter) 36 | self.pushButton_median_blur_filter.setGeometry(QtCore.QRect(30, 50, 111, 28)) 37 | self.pushButton_median_blur_filter.setObjectName("pushButton_median_blur_filter") 38 | self.groupBox_gauss_blur_filter = QtWidgets.QGroupBox(self.groupBox) 39 | self.groupBox_gauss_blur_filter.setGeometry(QtCore.QRect(190, 10, 161, 91)) 40 | font = QtGui.QFont() 41 | font.setFamily("Agency FB") 42 | font.setPointSize(8) 43 | self.groupBox_gauss_blur_filter.setFont(font) 44 | self.groupBox_gauss_blur_filter.setObjectName("groupBox_gauss_blur_filter") 45 | self.label_title_7 = QtWidgets.QLabel(self.groupBox_gauss_blur_filter) 46 | self.label_title_7.setGeometry(QtCore.QRect(10, 20, 51, 21)) 47 | self.label_title_7.setObjectName("label_title_7") 48 | self.spinBox_gauss_blur_ksize = QtWidgets.QSpinBox(self.groupBox_gauss_blur_filter) 49 | self.spinBox_gauss_blur_ksize.setGeometry(QtCore.QRect(100, 20, 46, 22)) 50 | self.spinBox_gauss_blur_ksize.setMinimum(3) 51 | self.spinBox_gauss_blur_ksize.setSingleStep(2) 52 | self.spinBox_gauss_blur_ksize.setProperty("value", 3) 53 | self.spinBox_gauss_blur_ksize.setObjectName("spinBox_gauss_blur_ksize") 54 | self.pushButton_gauss_blur_filter = QtWidgets.QPushButton(self.groupBox_gauss_blur_filter) 55 | self.pushButton_gauss_blur_filter.setGeometry(QtCore.QRect(30, 50, 111, 28)) 56 | self.pushButton_gauss_blur_filter.setObjectName("pushButton_gauss_blur_filter") 57 | self.groupBox_mean_blur_filter = QtWidgets.QGroupBox(self.groupBox) 58 | self.groupBox_mean_blur_filter.setGeometry(QtCore.QRect(10, 10, 161, 91)) 59 | font = QtGui.QFont() 60 | font.setFamily("Agency FB") 61 | font.setPointSize(8) 62 | self.groupBox_mean_blur_filter.setFont(font) 63 | self.groupBox_mean_blur_filter.setObjectName("groupBox_mean_blur_filter") 64 | self.label_title_9 = QtWidgets.QLabel(self.groupBox_mean_blur_filter) 65 | self.label_title_9.setGeometry(QtCore.QRect(10, 20, 51, 21)) 66 | self.label_title_9.setObjectName("label_title_9") 67 | self.spinBox_mean_ksize = QtWidgets.QSpinBox(self.groupBox_mean_blur_filter) 68 | self.spinBox_mean_ksize.setGeometry(QtCore.QRect(100, 20, 46, 22)) 69 | self.spinBox_mean_ksize.setMinimum(3) 70 | self.spinBox_mean_ksize.setSingleStep(2) 71 | self.spinBox_mean_ksize.setProperty("value", 3) 72 | self.spinBox_mean_ksize.setObjectName("spinBox_mean_ksize") 73 | self.pushButton_mean_blur_filter = QtWidgets.QPushButton(self.groupBox_mean_blur_filter) 74 | self.pushButton_mean_blur_filter.setGeometry(QtCore.QRect(30, 50, 111, 28)) 75 | self.pushButton_mean_blur_filter.setObjectName("pushButton_mean_blur_filter") 76 | self.groupBox_double_blur_filter = QtWidgets.QGroupBox(self.groupBox) 77 | self.groupBox_double_blur_filter.setGeometry(QtCore.QRect(190, 100, 161, 91)) 78 | font = QtGui.QFont() 79 | font.setFamily("Agency FB") 80 | font.setPointSize(8) 81 | self.groupBox_double_blur_filter.setFont(font) 82 | self.groupBox_double_blur_filter.setObjectName("groupBox_double_blur_filter") 83 | self.pushButton_double_blur_filter = QtWidgets.QPushButton(self.groupBox_double_blur_filter) 84 | self.pushButton_double_blur_filter.setGeometry(QtCore.QRect(30, 30, 111, 28)) 85 | self.pushButton_double_blur_filter.setObjectName("pushButton_double_blur_filter") 86 | self.pushButton_open_file = QtWidgets.QPushButton(Form) 87 | self.pushButton_open_file.setGeometry(QtCore.QRect(30, 30, 101, 31)) 88 | self.pushButton_open_file.setCheckable(False) 89 | self.pushButton_open_file.setDefault(True) 90 | self.pushButton_open_file.setObjectName("pushButton_open_file") 91 | self.groupBox_2 = QtWidgets.QGroupBox(Form) 92 | self.groupBox_2.setGeometry(QtCore.QRect(150, 20, 461, 201)) 93 | font = QtGui.QFont() 94 | font.setFamily("Agency FB") 95 | font.setPointSize(9) 96 | font.setBold(False) 97 | font.setWeight(50) 98 | self.groupBox_2.setFont(font) 99 | self.groupBox_2.setTitle("") 100 | self.groupBox_2.setFlat(False) 101 | self.groupBox_2.setCheckable(False) 102 | self.groupBox_2.setObjectName("groupBox_2") 103 | self.groupBox_salt_noise = QtWidgets.QGroupBox(self.groupBox_2) 104 | self.groupBox_salt_noise.setGeometry(QtCore.QRect(10, 10, 141, 181)) 105 | font = QtGui.QFont() 106 | font.setFamily("Agency FB") 107 | font.setPointSize(7) 108 | self.groupBox_salt_noise.setFont(font) 109 | self.groupBox_salt_noise.setObjectName("groupBox_salt_noise") 110 | self.label = QtWidgets.QLabel(self.groupBox_salt_noise) 111 | self.label.setGeometry(QtCore.QRect(10, 30, 41, 21)) 112 | self.label.setObjectName("label") 113 | self.doubleSpinBox_salt_proportion = QtWidgets.QDoubleSpinBox(self.groupBox_salt_noise) 114 | self.doubleSpinBox_salt_proportion.setGeometry(QtCore.QRect(50, 30, 61, 22)) 115 | self.doubleSpinBox_salt_proportion.setMaximum(0.9) 116 | self.doubleSpinBox_salt_proportion.setSingleStep(0.01) 117 | self.doubleSpinBox_salt_proportion.setProperty("value", 0.05) 118 | self.doubleSpinBox_salt_proportion.setObjectName("doubleSpinBox_salt_proportion") 119 | self.pushButton_salt_pepper_noise = QtWidgets.QPushButton(self.groupBox_salt_noise) 120 | self.pushButton_salt_pepper_noise.setGeometry(QtCore.QRect(20, 130, 101, 28)) 121 | self.pushButton_salt_pepper_noise.setObjectName("pushButton_salt_pepper_noise") 122 | self.radioButton_1 = QtWidgets.QRadioButton(self.groupBox_salt_noise) 123 | self.radioButton_1.setGeometry(QtCore.QRect(20, 60, 101, 19)) 124 | self.radioButton_1.setChecked(True) 125 | self.radioButton_1.setObjectName("radioButton_1") 126 | self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox_salt_noise) 127 | self.radioButton_2.setGeometry(QtCore.QRect(20, 80, 101, 19)) 128 | self.radioButton_2.setObjectName("radioButton_2") 129 | self.radioButton_3 = QtWidgets.QRadioButton(self.groupBox_salt_noise) 130 | self.radioButton_3.setGeometry(QtCore.QRect(20, 100, 101, 19)) 131 | self.radioButton_3.setObjectName("radioButton_3") 132 | self.groupBox_speckle_noise = QtWidgets.QGroupBox(self.groupBox_2) 133 | self.groupBox_speckle_noise.setGeometry(QtCore.QRect(310, 10, 141, 181)) 134 | font = QtGui.QFont() 135 | font.setFamily("Agency FB") 136 | font.setPointSize(7) 137 | self.groupBox_speckle_noise.setFont(font) 138 | self.groupBox_speckle_noise.setObjectName("groupBox_speckle_noise") 139 | self.pushButton_speckle_noise = QtWidgets.QPushButton(self.groupBox_speckle_noise) 140 | self.pushButton_speckle_noise.setGeometry(QtCore.QRect(20, 130, 101, 28)) 141 | self.pushButton_speckle_noise.setObjectName("pushButton_speckle_noise") 142 | self.label_title_11 = QtWidgets.QLabel(self.groupBox_speckle_noise) 143 | self.label_title_11.setGeometry(QtCore.QRect(20, 30, 41, 21)) 144 | self.label_title_11.setObjectName("label_title_11") 145 | self.label_title_12 = QtWidgets.QLabel(self.groupBox_speckle_noise) 146 | self.label_title_12.setGeometry(QtCore.QRect(20, 60, 41, 21)) 147 | self.label_title_12.setObjectName("label_title_12") 148 | self.doubleSpinBox_speckle_var = QtWidgets.QDoubleSpinBox(self.groupBox_speckle_noise) 149 | self.doubleSpinBox_speckle_var.setGeometry(QtCore.QRect(60, 60, 61, 22)) 150 | self.doubleSpinBox_speckle_var.setMaximum(1.0) 151 | self.doubleSpinBox_speckle_var.setSingleStep(0.01) 152 | self.doubleSpinBox_speckle_var.setProperty("value", 0.05) 153 | self.doubleSpinBox_speckle_var.setObjectName("doubleSpinBox_speckle_var") 154 | self.doubleSpinBox_speckle_mean = QtWidgets.QDoubleSpinBox(self.groupBox_speckle_noise) 155 | self.doubleSpinBox_speckle_mean.setGeometry(QtCore.QRect(60, 30, 61, 22)) 156 | self.doubleSpinBox_speckle_mean.setMinimum(-1.0) 157 | self.doubleSpinBox_speckle_mean.setMaximum(1.0) 158 | self.doubleSpinBox_speckle_mean.setSingleStep(0.01) 159 | self.doubleSpinBox_speckle_mean.setProperty("value", 0.0) 160 | self.doubleSpinBox_speckle_mean.setObjectName("doubleSpinBox_speckle_mean") 161 | self.groupBox_gauss_noise = QtWidgets.QGroupBox(self.groupBox_2) 162 | self.groupBox_gauss_noise.setGeometry(QtCore.QRect(160, 10, 141, 181)) 163 | font = QtGui.QFont() 164 | font.setFamily("Agency FB") 165 | font.setPointSize(7) 166 | self.groupBox_gauss_noise.setFont(font) 167 | self.groupBox_gauss_noise.setObjectName("groupBox_gauss_noise") 168 | self.pushButton_gasuss_noise = QtWidgets.QPushButton(self.groupBox_gauss_noise) 169 | self.pushButton_gasuss_noise.setGeometry(QtCore.QRect(20, 130, 101, 28)) 170 | self.pushButton_gasuss_noise.setObjectName("pushButton_gasuss_noise") 171 | self.doubleSpinBox_gauss_mean = QtWidgets.QDoubleSpinBox(self.groupBox_gauss_noise) 172 | self.doubleSpinBox_gauss_mean.setGeometry(QtCore.QRect(60, 30, 61, 22)) 173 | self.doubleSpinBox_gauss_mean.setMinimum(-1.0) 174 | self.doubleSpinBox_gauss_mean.setMaximum(1.0) 175 | self.doubleSpinBox_gauss_mean.setSingleStep(0.01) 176 | self.doubleSpinBox_gauss_mean.setProperty("value", 0.0) 177 | self.doubleSpinBox_gauss_mean.setObjectName("doubleSpinBox_gauss_mean") 178 | self.label_title_8 = QtWidgets.QLabel(self.groupBox_gauss_noise) 179 | self.label_title_8.setGeometry(QtCore.QRect(20, 30, 41, 21)) 180 | self.label_title_8.setObjectName("label_title_8") 181 | self.doubleSpinBox_gauss_var = QtWidgets.QDoubleSpinBox(self.groupBox_gauss_noise) 182 | self.doubleSpinBox_gauss_var.setGeometry(QtCore.QRect(60, 60, 61, 22)) 183 | self.doubleSpinBox_gauss_var.setMaximum(1.0) 184 | self.doubleSpinBox_gauss_var.setSingleStep(0.01) 185 | self.doubleSpinBox_gauss_var.setProperty("value", 0.05) 186 | self.doubleSpinBox_gauss_var.setObjectName("doubleSpinBox_gauss_var") 187 | self.label_title_10 = QtWidgets.QLabel(self.groupBox_gauss_noise) 188 | self.label_title_10.setGeometry(QtCore.QRect(20, 60, 41, 21)) 189 | self.label_title_10.setObjectName("label_title_10") 190 | self.comboBox_noise_type = QtWidgets.QComboBox(Form) 191 | self.comboBox_noise_type.setGeometry(QtCore.QRect(30, 110, 100, 20)) 192 | self.comboBox_noise_type.setMaxVisibleItems(10) 193 | self.comboBox_noise_type.setInsertPolicy(QtWidgets.QComboBox.InsertAtBottom) 194 | self.comboBox_noise_type.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContentsOnFirstShow) 195 | self.comboBox_noise_type.setFrame(True) 196 | self.comboBox_noise_type.setModelColumn(0) 197 | self.comboBox_noise_type.setObjectName("comboBox_noise_type") 198 | self.label_2 = QtWidgets.QLabel(Form) 199 | self.label_2.setGeometry(QtCore.QRect(30, 80, 100, 31)) 200 | self.label_2.setObjectName("label_2") 201 | self.label_3 = QtWidgets.QLabel(Form) 202 | self.label_3.setGeometry(QtCore.QRect(30, 150, 100, 31)) 203 | self.label_3.setObjectName("label_3") 204 | self.comboBox_filter_type = QtWidgets.QComboBox(Form) 205 | self.comboBox_filter_type.setGeometry(QtCore.QRect(30, 180, 100, 20)) 206 | self.comboBox_filter_type.setMaxVisibleItems(10) 207 | self.comboBox_filter_type.setFrame(True) 208 | self.comboBox_filter_type.setModelColumn(0) 209 | self.comboBox_filter_type.setObjectName("comboBox_filter_type") 210 | self.label_title = QtWidgets.QLabel(Form) 211 | self.label_title.setGeometry(QtCore.QRect(1030, 30, 281, 41)) 212 | font = QtGui.QFont() 213 | font.setFamily("Agency FB") 214 | font.setPointSize(22) 215 | font.setBold(True) 216 | font.setWeight(75) 217 | self.label_title.setFont(font) 218 | self.label_title.setAlignment(QtCore.Qt.AlignCenter) 219 | self.label_title.setObjectName("label_title") 220 | self.label_image_3 = QtWidgets.QLabel(Form) 221 | self.label_image_3.setGeometry(QtCore.QRect(880, 280, 420, 400)) 222 | font = QtGui.QFont() 223 | font.setFamily("Agency FB") 224 | font.setPointSize(12) 225 | font.setBold(True) 226 | font.setWeight(75) 227 | self.label_image_3.setFont(font) 228 | self.label_image_3.setFrameShape(QtWidgets.QFrame.Box) 229 | self.label_image_3.setFrameShadow(QtWidgets.QFrame.Raised) 230 | self.label_image_3.setAlignment(QtCore.Qt.AlignCenter) 231 | self.label_image_3.setObjectName("label_image_3") 232 | self.label_image_2 = QtWidgets.QLabel(Form) 233 | self.label_image_2.setGeometry(QtCore.QRect(450, 280, 420, 400)) 234 | font = QtGui.QFont() 235 | font.setFamily("Agency FB") 236 | font.setPointSize(12) 237 | font.setBold(True) 238 | font.setWeight(75) 239 | self.label_image_2.setFont(font) 240 | self.label_image_2.setFrameShape(QtWidgets.QFrame.Box) 241 | self.label_image_2.setFrameShadow(QtWidgets.QFrame.Raised) 242 | self.label_image_2.setAlignment(QtCore.Qt.AlignCenter) 243 | self.label_image_2.setObjectName("label_image_2") 244 | self.label_image_1 = QtWidgets.QLabel(Form) 245 | self.label_image_1.setGeometry(QtCore.QRect(20, 280, 420, 400)) 246 | font = QtGui.QFont() 247 | font.setFamily("Agency FB") 248 | font.setPointSize(12) 249 | font.setBold(True) 250 | font.setWeight(75) 251 | self.label_image_1.setFont(font) 252 | self.label_image_1.setFrameShape(QtWidgets.QFrame.Box) 253 | self.label_image_1.setFrameShadow(QtWidgets.QFrame.Raised) 254 | self.label_image_1.setAlignment(QtCore.Qt.AlignCenter) 255 | self.label_image_1.setObjectName("label_image_1") 256 | 257 | self.retranslateUi(Form) 258 | self.comboBox_noise_type.setCurrentIndex(-1) 259 | self.comboBox_filter_type.setCurrentIndex(-1) 260 | QtCore.QMetaObject.connectSlotsByName(Form) 261 | 262 | def retranslateUi(self, Form): 263 | _translate = QtCore.QCoreApplication.translate 264 | Form.setWindowTitle(_translate("Form", "图像的加噪和平滑")) 265 | self.groupBox_median_blur_filter.setTitle(_translate("Form", "中值滤波")) 266 | self.label_title_3.setText(_translate("Form", "核大小:")) 267 | self.pushButton_median_blur_filter.setText(_translate("Form", "开始处理")) 268 | self.groupBox_gauss_blur_filter.setTitle(_translate("Form", "高斯滤波")) 269 | self.label_title_7.setText(_translate("Form", "核大小:")) 270 | self.pushButton_gauss_blur_filter.setText(_translate("Form", "开始处理")) 271 | self.groupBox_mean_blur_filter.setTitle(_translate("Form", "均值滤波")) 272 | self.label_title_9.setText(_translate("Form", "核大小:")) 273 | self.pushButton_mean_blur_filter.setText(_translate("Form", "开始处理")) 274 | self.groupBox_double_blur_filter.setTitle(_translate("Form", "双边滤波")) 275 | self.pushButton_double_blur_filter.setText(_translate("Form", "开始处理")) 276 | self.pushButton_open_file.setText(_translate("Form", "打开图片")) 277 | self.groupBox_salt_noise.setTitle(_translate("Form", "椒盐噪声")) 278 | self.label.setText(_translate("Form", "比例:")) 279 | self.pushButton_salt_pepper_noise.setText(_translate("Form", "确定")) 280 | self.radioButton_1.setText(_translate("Form", "椒盐(随机)")) 281 | self.radioButton_2.setText(_translate("Form", "盐(白点)")) 282 | self.radioButton_3.setText(_translate("Form", "椒(黑点)")) 283 | self.groupBox_speckle_noise.setTitle(_translate("Form", "乘积性噪声")) 284 | self.pushButton_speckle_noise.setText(_translate("Form", "确定")) 285 | self.label_title_11.setText(_translate("Form", "均值:")) 286 | self.label_title_12.setText(_translate("Form", "方差:")) 287 | self.groupBox_gauss_noise.setTitle(_translate("Form", "高斯噪声")) 288 | self.pushButton_gasuss_noise.setText(_translate("Form", "确定")) 289 | self.label_title_8.setText(_translate("Form", "均值:")) 290 | self.label_title_10.setText(_translate("Form", "方差:")) 291 | self.label_2.setText(_translate("Form", "添加噪声类型:")) 292 | self.label_3.setText(_translate("Form", "平滑滤波类型:")) 293 | self.label_title.setText(_translate("Form", "图像加噪和平滑")) 294 | self.label_image_3.setText(_translate("Form", "平滑滤波")) 295 | self.label_image_2.setText(_translate("Form", "加噪")) 296 | self.label_image_1.setText(_translate("Form", "原图")) 297 | 298 | -------------------------------------------------------------------------------- /sub_windows/ui_sub_window_4.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_sub_window_4.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(1269, 752) 15 | self.label_title = QtWidgets.QLabel(Form) 16 | self.label_title.setGeometry(QtCore.QRect(30, 10, 161, 41)) 17 | font = QtGui.QFont() 18 | font.setFamily("Agency FB") 19 | font.setPointSize(22) 20 | font.setBold(True) 21 | font.setWeight(75) 22 | self.label_title.setFont(font) 23 | self.label_title.setAlignment(QtCore.Qt.AlignCenter) 24 | self.label_title.setObjectName("label_title") 25 | self.label_image_2 = QtWidgets.QLabel(Form) 26 | self.label_image_2.setGeometry(QtCore.QRect(740, 10, 480, 480)) 27 | font = QtGui.QFont() 28 | font.setFamily("Agency FB") 29 | font.setPointSize(14) 30 | font.setBold(True) 31 | font.setWeight(75) 32 | self.label_image_2.setFont(font) 33 | self.label_image_2.setFrameShape(QtWidgets.QFrame.Box) 34 | self.label_image_2.setFrameShadow(QtWidgets.QFrame.Raised) 35 | self.label_image_2.setAlignment(QtCore.Qt.AlignCenter) 36 | self.label_image_2.setObjectName("label_image_2") 37 | self.pushButton_open_file = QtWidgets.QPushButton(Form) 38 | self.pushButton_open_file.setGeometry(QtCore.QRect(40, 90, 111, 28)) 39 | self.pushButton_open_file.setCheckable(False) 40 | self.pushButton_open_file.setDefault(True) 41 | self.pushButton_open_file.setObjectName("pushButton_open_file") 42 | self.groupBox_sobel_filter = QtWidgets.QGroupBox(Form) 43 | self.groupBox_sobel_filter.setGeometry(QtCore.QRect(10, 230, 171, 151)) 44 | self.groupBox_sobel_filter.setObjectName("groupBox_sobel_filter") 45 | self.pushButton_sobel_filter = QtWidgets.QPushButton(self.groupBox_sobel_filter) 46 | self.pushButton_sobel_filter.setGeometry(QtCore.QRect(40, 110, 93, 28)) 47 | self.pushButton_sobel_filter.setObjectName("pushButton_sobel_filter") 48 | self.radioButton_sobel_dx = QtWidgets.QRadioButton(self.groupBox_sobel_filter) 49 | self.radioButton_sobel_dx.setGeometry(QtCore.QRect(30, 20, 121, 19)) 50 | self.radioButton_sobel_dx.setObjectName("radioButton_sobel_dx") 51 | self.radioButton_sobel_dy = QtWidgets.QRadioButton(self.groupBox_sobel_filter) 52 | self.radioButton_sobel_dy.setGeometry(QtCore.QRect(30, 50, 121, 19)) 53 | self.radioButton_sobel_dy.setObjectName("radioButton_sobel_dy") 54 | self.radioButton_sobel_dx_dy = QtWidgets.QRadioButton(self.groupBox_sobel_filter) 55 | self.radioButton_sobel_dx_dy.setGeometry(QtCore.QRect(30, 80, 121, 19)) 56 | self.radioButton_sobel_dx_dy.setObjectName("radioButton_sobel_dx_dy") 57 | self.groupBox_laplace_filter = QtWidgets.QGroupBox(Form) 58 | self.groupBox_laplace_filter.setGeometry(QtCore.QRect(10, 400, 171, 111)) 59 | self.groupBox_laplace_filter.setObjectName("groupBox_laplace_filter") 60 | self.pushButton_laplace_filter = QtWidgets.QPushButton(self.groupBox_laplace_filter) 61 | self.pushButton_laplace_filter.setGeometry(QtCore.QRect(40, 60, 93, 28)) 62 | self.pushButton_laplace_filter.setObjectName("pushButton_laplace_filter") 63 | self.spinBox_laplace_ksize = QtWidgets.QSpinBox(self.groupBox_laplace_filter) 64 | self.spinBox_laplace_ksize.setGeometry(QtCore.QRect(100, 30, 46, 22)) 65 | self.spinBox_laplace_ksize.setMinimum(1) 66 | self.spinBox_laplace_ksize.setSingleStep(2) 67 | self.spinBox_laplace_ksize.setProperty("value", 1) 68 | self.spinBox_laplace_ksize.setObjectName("spinBox_laplace_ksize") 69 | self.label_title_9 = QtWidgets.QLabel(self.groupBox_laplace_filter) 70 | self.label_title_9.setGeometry(QtCore.QRect(30, 30, 51, 21)) 71 | self.label_title_9.setObjectName("label_title_9") 72 | self.label_image_1 = QtWidgets.QLabel(Form) 73 | self.label_image_1.setGeometry(QtCore.QRect(220, 10, 480, 480)) 74 | font = QtGui.QFont() 75 | font.setFamily("Agency FB") 76 | font.setPointSize(14) 77 | font.setBold(True) 78 | font.setWeight(75) 79 | self.label_image_1.setFont(font) 80 | self.label_image_1.setFrameShape(QtWidgets.QFrame.Box) 81 | self.label_image_1.setFrameShadow(QtWidgets.QFrame.Raised) 82 | self.label_image_1.setScaledContents(False) 83 | self.label_image_1.setAlignment(QtCore.Qt.AlignCenter) 84 | self.label_image_1.setObjectName("label_image_1") 85 | self.groupBox_custom_filter = QtWidgets.QGroupBox(Form) 86 | self.groupBox_custom_filter.setGeometry(QtCore.QRect(10, 530, 271, 211)) 87 | self.groupBox_custom_filter.setObjectName("groupBox_custom_filter") 88 | self.doubleSpinBox_custom_filter_1 = QtWidgets.QDoubleSpinBox(self.groupBox_custom_filter) 89 | self.doubleSpinBox_custom_filter_1.setGeometry(QtCore.QRect(40, 40, 51, 22)) 90 | self.doubleSpinBox_custom_filter_1.setDecimals(1) 91 | self.doubleSpinBox_custom_filter_1.setMinimum(-100.0) 92 | self.doubleSpinBox_custom_filter_1.setSingleStep(0.5) 93 | self.doubleSpinBox_custom_filter_1.setObjectName("doubleSpinBox_custom_filter_1") 94 | self.doubleSpinBox_custom_filter_2 = QtWidgets.QDoubleSpinBox(self.groupBox_custom_filter) 95 | self.doubleSpinBox_custom_filter_2.setGeometry(QtCore.QRect(110, 40, 51, 22)) 96 | self.doubleSpinBox_custom_filter_2.setDecimals(1) 97 | self.doubleSpinBox_custom_filter_2.setMinimum(-100.0) 98 | self.doubleSpinBox_custom_filter_2.setSingleStep(0.5) 99 | self.doubleSpinBox_custom_filter_2.setProperty("value", -1.0) 100 | self.doubleSpinBox_custom_filter_2.setObjectName("doubleSpinBox_custom_filter_2") 101 | self.doubleSpinBox_custom_filter_3 = QtWidgets.QDoubleSpinBox(self.groupBox_custom_filter) 102 | self.doubleSpinBox_custom_filter_3.setGeometry(QtCore.QRect(180, 40, 51, 22)) 103 | self.doubleSpinBox_custom_filter_3.setDecimals(1) 104 | self.doubleSpinBox_custom_filter_3.setMinimum(-100.0) 105 | self.doubleSpinBox_custom_filter_3.setSingleStep(0.5) 106 | self.doubleSpinBox_custom_filter_3.setObjectName("doubleSpinBox_custom_filter_3") 107 | self.doubleSpinBox_custom_filter_4 = QtWidgets.QDoubleSpinBox(self.groupBox_custom_filter) 108 | self.doubleSpinBox_custom_filter_4.setGeometry(QtCore.QRect(40, 80, 51, 22)) 109 | self.doubleSpinBox_custom_filter_4.setDecimals(1) 110 | self.doubleSpinBox_custom_filter_4.setMinimum(-100.0) 111 | self.doubleSpinBox_custom_filter_4.setSingleStep(0.5) 112 | self.doubleSpinBox_custom_filter_4.setProperty("value", -1.0) 113 | self.doubleSpinBox_custom_filter_4.setObjectName("doubleSpinBox_custom_filter_4") 114 | self.doubleSpinBox_custom_filter_5 = QtWidgets.QDoubleSpinBox(self.groupBox_custom_filter) 115 | self.doubleSpinBox_custom_filter_5.setGeometry(QtCore.QRect(110, 80, 51, 22)) 116 | self.doubleSpinBox_custom_filter_5.setDecimals(1) 117 | self.doubleSpinBox_custom_filter_5.setMinimum(-100.0) 118 | self.doubleSpinBox_custom_filter_5.setSingleStep(0.5) 119 | self.doubleSpinBox_custom_filter_5.setProperty("value", 5.0) 120 | self.doubleSpinBox_custom_filter_5.setObjectName("doubleSpinBox_custom_filter_5") 121 | self.doubleSpinBox_custom_filter_6 = QtWidgets.QDoubleSpinBox(self.groupBox_custom_filter) 122 | self.doubleSpinBox_custom_filter_6.setGeometry(QtCore.QRect(180, 80, 51, 22)) 123 | self.doubleSpinBox_custom_filter_6.setDecimals(1) 124 | self.doubleSpinBox_custom_filter_6.setMinimum(-100.0) 125 | self.doubleSpinBox_custom_filter_6.setSingleStep(0.5) 126 | self.doubleSpinBox_custom_filter_6.setProperty("value", -1.0) 127 | self.doubleSpinBox_custom_filter_6.setObjectName("doubleSpinBox_custom_filter_6") 128 | self.doubleSpinBox_custom_filter_7 = QtWidgets.QDoubleSpinBox(self.groupBox_custom_filter) 129 | self.doubleSpinBox_custom_filter_7.setGeometry(QtCore.QRect(40, 120, 51, 22)) 130 | self.doubleSpinBox_custom_filter_7.setDecimals(1) 131 | self.doubleSpinBox_custom_filter_7.setMinimum(-100.0) 132 | self.doubleSpinBox_custom_filter_7.setSingleStep(0.5) 133 | self.doubleSpinBox_custom_filter_7.setObjectName("doubleSpinBox_custom_filter_7") 134 | self.doubleSpinBox_custom_filter_8 = QtWidgets.QDoubleSpinBox(self.groupBox_custom_filter) 135 | self.doubleSpinBox_custom_filter_8.setGeometry(QtCore.QRect(110, 120, 51, 22)) 136 | self.doubleSpinBox_custom_filter_8.setDecimals(1) 137 | self.doubleSpinBox_custom_filter_8.setMinimum(-100.0) 138 | self.doubleSpinBox_custom_filter_8.setSingleStep(0.5) 139 | self.doubleSpinBox_custom_filter_8.setProperty("value", -1.0) 140 | self.doubleSpinBox_custom_filter_8.setObjectName("doubleSpinBox_custom_filter_8") 141 | self.doubleSpinBox_custom_filter_9 = QtWidgets.QDoubleSpinBox(self.groupBox_custom_filter) 142 | self.doubleSpinBox_custom_filter_9.setGeometry(QtCore.QRect(180, 120, 51, 22)) 143 | self.doubleSpinBox_custom_filter_9.setDecimals(1) 144 | self.doubleSpinBox_custom_filter_9.setMinimum(-100.0) 145 | self.doubleSpinBox_custom_filter_9.setSingleStep(0.5) 146 | self.doubleSpinBox_custom_filter_9.setObjectName("doubleSpinBox_custom_filter_9") 147 | self.pushButton_custom_filter = QtWidgets.QPushButton(self.groupBox_custom_filter) 148 | self.pushButton_custom_filter.setGeometry(QtCore.QRect(90, 160, 93, 28)) 149 | self.pushButton_custom_filter.setObjectName("pushButton_custom_filter") 150 | self.comboBox_selector = QtWidgets.QComboBox(Form) 151 | self.comboBox_selector.setGeometry(QtCore.QRect(40, 180, 111, 31)) 152 | self.comboBox_selector.setObjectName("comboBox_selector") 153 | self.label = QtWidgets.QLabel(Form) 154 | self.label.setGeometry(QtCore.QRect(40, 140, 111, 31)) 155 | self.label.setObjectName("label") 156 | 157 | self.retranslateUi(Form) 158 | QtCore.QMetaObject.connectSlotsByName(Form) 159 | 160 | def retranslateUi(self, Form): 161 | _translate = QtCore.QCoreApplication.translate 162 | Form.setWindowTitle(_translate("Form", "图像锐化")) 163 | self.label_title.setText(_translate("Form", "图像锐化")) 164 | self.label_image_2.setText(_translate("Form", "处理后的图像")) 165 | self.pushButton_open_file.setText(_translate("Form", "打开图片")) 166 | self.groupBox_sobel_filter.setTitle(_translate("Form", "Sobel算子")) 167 | self.pushButton_sobel_filter.setText(_translate("Form", "确定")) 168 | self.radioButton_sobel_dx.setText(_translate("Form", "X方向梯度")) 169 | self.radioButton_sobel_dy.setText(_translate("Form", "Y方向梯度")) 170 | self.radioButton_sobel_dx_dy.setText(_translate("Form", "X和Y方向梯度")) 171 | self.groupBox_laplace_filter.setTitle(_translate("Form", "Laplace算子")) 172 | self.pushButton_laplace_filter.setText(_translate("Form", "确定")) 173 | self.label_title_9.setText(_translate("Form", "核大小:")) 174 | self.label_image_1.setText(_translate("Form", "原图")) 175 | self.groupBox_custom_filter.setTitle(_translate("Form", "自定义3*3卷积核")) 176 | self.pushButton_custom_filter.setText(_translate("Form", "确定")) 177 | self.label.setText(_translate("Form", "选择锐化类型:")) 178 | 179 | -------------------------------------------------------------------------------- /sub_windows/ui_sub_window_5.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_sub_window_5.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(1269, 797) 15 | self.label_image_2 = QtWidgets.QLabel(Form) 16 | self.label_image_2.setGeometry(QtCore.QRect(710, 10, 450, 450)) 17 | font = QtGui.QFont() 18 | font.setFamily("Agency FB") 19 | font.setPointSize(14) 20 | font.setBold(True) 21 | font.setWeight(75) 22 | self.label_image_2.setFont(font) 23 | self.label_image_2.setFrameShape(QtWidgets.QFrame.Box) 24 | self.label_image_2.setFrameShadow(QtWidgets.QFrame.Raised) 25 | self.label_image_2.setAlignment(QtCore.Qt.AlignCenter) 26 | self.label_image_2.setObjectName("label_image_2") 27 | self.pushButton_open_file = QtWidgets.QPushButton(Form) 28 | self.pushButton_open_file.setGeometry(QtCore.QRect(60, 60, 111, 28)) 29 | self.pushButton_open_file.setCheckable(False) 30 | self.pushButton_open_file.setDefault(True) 31 | self.pushButton_open_file.setObjectName("pushButton_open_file") 32 | self.label_image_1 = QtWidgets.QLabel(Form) 33 | self.label_image_1.setGeometry(QtCore.QRect(250, 10, 450, 450)) 34 | font = QtGui.QFont() 35 | font.setFamily("Agency FB") 36 | font.setPointSize(14) 37 | font.setBold(True) 38 | font.setWeight(75) 39 | self.label_image_1.setFont(font) 40 | self.label_image_1.setFrameShape(QtWidgets.QFrame.Box) 41 | self.label_image_1.setFrameShadow(QtWidgets.QFrame.Raised) 42 | self.label_image_1.setScaledContents(False) 43 | self.label_image_1.setAlignment(QtCore.Qt.AlignCenter) 44 | self.label_image_1.setObjectName("label_image_1") 45 | self.label_image_3 = QtWidgets.QLabel(Form) 46 | self.label_image_3.setGeometry(QtCore.QRect(370, 470, 256, 256)) 47 | font = QtGui.QFont() 48 | font.setFamily("Agency FB") 49 | font.setPointSize(14) 50 | font.setBold(True) 51 | font.setWeight(75) 52 | self.label_image_3.setFont(font) 53 | self.label_image_3.setFrameShape(QtWidgets.QFrame.Box) 54 | self.label_image_3.setFrameShadow(QtWidgets.QFrame.Raised) 55 | self.label_image_3.setScaledContents(False) 56 | self.label_image_3.setAlignment(QtCore.Qt.AlignCenter) 57 | self.label_image_3.setObjectName("label_image_3") 58 | self.label_image_4 = QtWidgets.QLabel(Form) 59 | self.label_image_4.setGeometry(QtCore.QRect(820, 470, 256, 256)) 60 | font = QtGui.QFont() 61 | font.setFamily("Agency FB") 62 | font.setPointSize(14) 63 | font.setBold(True) 64 | font.setWeight(75) 65 | self.label_image_4.setFont(font) 66 | self.label_image_4.setFrameShape(QtWidgets.QFrame.Box) 67 | self.label_image_4.setFrameShadow(QtWidgets.QFrame.Raised) 68 | self.label_image_4.setAlignment(QtCore.Qt.AlignCenter) 69 | self.label_image_4.setObjectName("label_image_4") 70 | self.groupBox_1 = QtWidgets.QGroupBox(Form) 71 | self.groupBox_1.setGeometry(QtCore.QRect(30, 140, 181, 131)) 72 | self.groupBox_1.setObjectName("groupBox_1") 73 | self.pushButton_brightness_change = QtWidgets.QPushButton(self.groupBox_1) 74 | self.pushButton_brightness_change.setGeometry(QtCore.QRect(40, 80, 93, 28)) 75 | self.pushButton_brightness_change.setObjectName("pushButton_brightness_change") 76 | self.spinBox_brightness_change = QtWidgets.QSpinBox(self.groupBox_1) 77 | self.spinBox_brightness_change.setGeometry(QtCore.QRect(100, 40, 46, 22)) 78 | self.spinBox_brightness_change.setMinimum(-255) 79 | self.spinBox_brightness_change.setMaximum(255) 80 | self.spinBox_brightness_change.setProperty("value", 20) 81 | self.spinBox_brightness_change.setObjectName("spinBox_brightness_change") 82 | self.label = QtWidgets.QLabel(self.groupBox_1) 83 | self.label.setGeometry(QtCore.QRect(20, 40, 61, 21)) 84 | self.label.setObjectName("label") 85 | self.groupBox_2 = QtWidgets.QGroupBox(Form) 86 | self.groupBox_2.setGeometry(QtCore.QRect(30, 310, 181, 131)) 87 | self.groupBox_2.setObjectName("groupBox_2") 88 | self.pushButton_hist_equ = QtWidgets.QPushButton(self.groupBox_2) 89 | self.pushButton_hist_equ.setGeometry(QtCore.QRect(40, 60, 93, 28)) 90 | self.pushButton_hist_equ.setObjectName("pushButton_hist_equ") 91 | 92 | self.retranslateUi(Form) 93 | QtCore.QMetaObject.connectSlotsByName(Form) 94 | 95 | def retranslateUi(self, Form): 96 | _translate = QtCore.QCoreApplication.translate 97 | Form.setWindowTitle(_translate("Form", "直方图均衡")) 98 | self.label_image_2.setText(_translate("Form", "处理后的图像")) 99 | self.pushButton_open_file.setText(_translate("Form", "打开图片")) 100 | self.label_image_1.setText(_translate("Form", "原图")) 101 | self.label_image_3.setText(_translate("Form", "原图直方图")) 102 | self.label_image_4.setText(_translate("Form", "处理后的图像直方图")) 103 | self.groupBox_1.setTitle(_translate("Form", "亮度均衡")) 104 | self.pushButton_brightness_change.setText(_translate("Form", "确定")) 105 | self.label.setText(_translate("Form", "均衡值")) 106 | self.groupBox_2.setTitle(_translate("Form", "直方图均衡")) 107 | self.pushButton_hist_equ.setText(_translate("Form", "确定")) 108 | 109 | -------------------------------------------------------------------------------- /sub_windows/ui_sub_window_6.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_sub_window_6.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(1269, 613) 15 | self.label_image_2 = QtWidgets.QLabel(Form) 16 | self.label_image_2.setGeometry(QtCore.QRect(720, 10, 450, 450)) 17 | font = QtGui.QFont() 18 | font.setFamily("Agency FB") 19 | font.setPointSize(14) 20 | font.setBold(True) 21 | font.setWeight(75) 22 | self.label_image_2.setFont(font) 23 | self.label_image_2.setFrameShape(QtWidgets.QFrame.Box) 24 | self.label_image_2.setFrameShadow(QtWidgets.QFrame.Raised) 25 | self.label_image_2.setAlignment(QtCore.Qt.AlignCenter) 26 | self.label_image_2.setObjectName("label_image_2") 27 | self.pushButton_open_file = QtWidgets.QPushButton(Form) 28 | self.pushButton_open_file.setGeometry(QtCore.QRect(60, 110, 111, 28)) 29 | self.pushButton_open_file.setCheckable(False) 30 | self.pushButton_open_file.setDefault(True) 31 | self.pushButton_open_file.setObjectName("pushButton_open_file") 32 | self.label_image_1 = QtWidgets.QLabel(Form) 33 | self.label_image_1.setGeometry(QtCore.QRect(250, 10, 450, 450)) 34 | font = QtGui.QFont() 35 | font.setFamily("Agency FB") 36 | font.setPointSize(14) 37 | font.setBold(True) 38 | font.setWeight(75) 39 | self.label_image_1.setFont(font) 40 | self.label_image_1.setFrameShape(QtWidgets.QFrame.Box) 41 | self.label_image_1.setFrameShadow(QtWidgets.QFrame.Raised) 42 | self.label_image_1.setScaledContents(False) 43 | self.label_image_1.setAlignment(QtCore.Qt.AlignCenter) 44 | self.label_image_1.setObjectName("label_image_1") 45 | self.groupBox_1 = QtWidgets.QGroupBox(Form) 46 | self.groupBox_1.setGeometry(QtCore.QRect(30, 180, 191, 271)) 47 | self.groupBox_1.setObjectName("groupBox_1") 48 | self.pushButton_dct_process = QtWidgets.QPushButton(self.groupBox_1) 49 | self.pushButton_dct_process.setGeometry(QtCore.QRect(50, 220, 93, 28)) 50 | self.pushButton_dct_process.setObjectName("pushButton_dct_process") 51 | self.verticalLayoutWidget = QtWidgets.QWidget(self.groupBox_1) 52 | self.verticalLayoutWidget.setGeometry(QtCore.QRect(40, 40, 111, 151)) 53 | self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") 54 | self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) 55 | self.verticalLayout.setContentsMargins(0, 0, 0, 0) 56 | self.verticalLayout.setObjectName("verticalLayout") 57 | self.radioButton_s1 = QtWidgets.QRadioButton(self.verticalLayoutWidget) 58 | self.radioButton_s1.setObjectName("radioButton_s1") 59 | self.verticalLayout.addWidget(self.radioButton_s1) 60 | self.radioButton_s3 = QtWidgets.QRadioButton(self.verticalLayoutWidget) 61 | self.radioButton_s3.setObjectName("radioButton_s3") 62 | self.verticalLayout.addWidget(self.radioButton_s3) 63 | self.radioButton_s6 = QtWidgets.QRadioButton(self.verticalLayoutWidget) 64 | self.radioButton_s6.setChecked(True) 65 | self.radioButton_s6.setObjectName("radioButton_s6") 66 | self.verticalLayout.addWidget(self.radioButton_s6) 67 | self.radioButton_s10 = QtWidgets.QRadioButton(self.verticalLayoutWidget) 68 | self.radioButton_s10.setObjectName("radioButton_s10") 69 | self.verticalLayout.addWidget(self.radioButton_s10) 70 | self.radioButton_s15 = QtWidgets.QRadioButton(self.verticalLayoutWidget) 71 | self.radioButton_s15.setObjectName("radioButton_s15") 72 | self.verticalLayout.addWidget(self.radioButton_s15) 73 | self.radioButton_s21 = QtWidgets.QRadioButton(self.verticalLayoutWidget) 74 | self.radioButton_s21.setObjectName("radioButton_s21") 75 | self.verticalLayout.addWidget(self.radioButton_s21) 76 | self.label = QtWidgets.QLabel(Form) 77 | self.label.setGeometry(QtCore.QRect(30, 10, 181, 51)) 78 | font = QtGui.QFont() 79 | font.setFamily("黑体") 80 | font.setPointSize(12) 81 | self.label.setFont(font) 82 | self.label.setObjectName("label") 83 | self.pushButton_save = QtWidgets.QPushButton(Form) 84 | self.pushButton_save.setGeometry(QtCore.QRect(920, 480, 93, 28)) 85 | self.pushButton_save.setObjectName("pushButton_save") 86 | 87 | self.retranslateUi(Form) 88 | QtCore.QMetaObject.connectSlotsByName(Form) 89 | 90 | def retranslateUi(self, Form): 91 | _translate = QtCore.QCoreApplication.translate 92 | Form.setWindowTitle(_translate("Form", "基于DCT的图像压缩")) 93 | self.label_image_2.setText(_translate("Form", "处理后的图像")) 94 | self.pushButton_open_file.setText(_translate("Form", "打开图片")) 95 | self.label_image_1.setText(_translate("Form", "原图")) 96 | self.groupBox_1.setTitle(_translate("Form", "DCT保留的频域系数")) 97 | self.pushButton_dct_process.setText(_translate("Form", "确定")) 98 | self.radioButton_s1.setText(_translate("Form", "1个系数")) 99 | self.radioButton_s3.setText(_translate("Form", "3个系数")) 100 | self.radioButton_s6.setText(_translate("Form", "6个系数")) 101 | self.radioButton_s10.setText(_translate("Form", "10个系数")) 102 | self.radioButton_s15.setText(_translate("Form", "15个系数")) 103 | self.radioButton_s21.setText(_translate("Form", "21个系数")) 104 | self.label.setText(_translate("Form", "基于DCT的图像压缩")) 105 | self.pushButton_save.setText(_translate("Form", "保存该图像")) 106 | 107 | -------------------------------------------------------------------------------- /sub_windows/ui_sub_window_7.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_sub_window_7.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(1269, 613) 15 | self.label_image_2 = QtWidgets.QLabel(Form) 16 | self.label_image_2.setGeometry(QtCore.QRect(720, 10, 450, 450)) 17 | font = QtGui.QFont() 18 | font.setFamily("Agency FB") 19 | font.setPointSize(14) 20 | font.setBold(True) 21 | font.setWeight(75) 22 | self.label_image_2.setFont(font) 23 | self.label_image_2.setFrameShape(QtWidgets.QFrame.Box) 24 | self.label_image_2.setFrameShadow(QtWidgets.QFrame.Raised) 25 | self.label_image_2.setAlignment(QtCore.Qt.AlignCenter) 26 | self.label_image_2.setObjectName("label_image_2") 27 | self.pushButton_open_file = QtWidgets.QPushButton(Form) 28 | self.pushButton_open_file.setGeometry(QtCore.QRect(80, 80, 111, 28)) 29 | self.pushButton_open_file.setCheckable(False) 30 | self.pushButton_open_file.setDefault(True) 31 | self.pushButton_open_file.setObjectName("pushButton_open_file") 32 | self.label_image_1 = QtWidgets.QLabel(Form) 33 | self.label_image_1.setGeometry(QtCore.QRect(250, 10, 450, 450)) 34 | font = QtGui.QFont() 35 | font.setFamily("Agency FB") 36 | font.setPointSize(14) 37 | font.setBold(True) 38 | font.setWeight(75) 39 | self.label_image_1.setFont(font) 40 | self.label_image_1.setFrameShape(QtWidgets.QFrame.Box) 41 | self.label_image_1.setFrameShadow(QtWidgets.QFrame.Raised) 42 | self.label_image_1.setScaledContents(False) 43 | self.label_image_1.setAlignment(QtCore.Qt.AlignCenter) 44 | self.label_image_1.setObjectName("label_image_1") 45 | self.groupBox_1 = QtWidgets.QGroupBox(Form) 46 | self.groupBox_1.setGeometry(QtCore.QRect(30, 190, 191, 251)) 47 | self.groupBox_1.setObjectName("groupBox_1") 48 | self.pushButton_canny = QtWidgets.QPushButton(self.groupBox_1) 49 | self.pushButton_canny.setGeometry(QtCore.QRect(50, 190, 93, 28)) 50 | self.pushButton_canny.setObjectName("pushButton_canny") 51 | self.spinBox_low_th = QtWidgets.QSpinBox(self.groupBox_1) 52 | self.spinBox_low_th.setGeometry(QtCore.QRect(120, 50, 61, 41)) 53 | self.spinBox_low_th.setMaximum(255) 54 | self.spinBox_low_th.setProperty("value", 150) 55 | self.spinBox_low_th.setObjectName("spinBox_low_th") 56 | self.label = QtWidgets.QLabel(self.groupBox_1) 57 | self.label.setGeometry(QtCore.QRect(10, 50, 81, 41)) 58 | self.label.setObjectName("label") 59 | self.spinBox_high_th = QtWidgets.QSpinBox(self.groupBox_1) 60 | self.spinBox_high_th.setGeometry(QtCore.QRect(120, 110, 61, 41)) 61 | self.spinBox_high_th.setMaximum(255) 62 | self.spinBox_high_th.setProperty("value", 200) 63 | self.spinBox_high_th.setObjectName("spinBox_high_th") 64 | self.label_2 = QtWidgets.QLabel(self.groupBox_1) 65 | self.label_2.setGeometry(QtCore.QRect(10, 110, 81, 41)) 66 | self.label_2.setObjectName("label_2") 67 | 68 | self.retranslateUi(Form) 69 | QtCore.QMetaObject.connectSlotsByName(Form) 70 | 71 | def retranslateUi(self, Form): 72 | _translate = QtCore.QCoreApplication.translate 73 | Form.setWindowTitle(_translate("Form", "边缘检测")) 74 | self.label_image_2.setText(_translate("Form", "处理后的图像")) 75 | self.pushButton_open_file.setText(_translate("Form", "打开图片")) 76 | self.label_image_1.setText(_translate("Form", "原图")) 77 | self.groupBox_1.setTitle(_translate("Form", "Canny边缘检测")) 78 | self.pushButton_canny.setText(_translate("Form", "确定")) 79 | self.label.setText(_translate("Form", "低阈值抑制")) 80 | self.label_2.setText(_translate("Form", "高阈值抑制")) 81 | 82 | -------------------------------------------------------------------------------- /sub_windows/ui_sub_window_8.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file './ui_sub_window_8.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.11.3 6 | # 7 | # WARNING! All changes made in this file will be lost! 8 | 9 | from PyQt5 import QtCore, QtGui, QtWidgets 10 | 11 | class Ui_Form(object): 12 | def setupUi(self, Form): 13 | Form.setObjectName("Form") 14 | Form.resize(921, 726) 15 | self.label_title = QtWidgets.QLabel(Form) 16 | self.label_title.setGeometry(QtCore.QRect(20, 20, 161, 41)) 17 | font = QtGui.QFont() 18 | font.setFamily("Agency FB") 19 | font.setPointSize(22) 20 | font.setBold(True) 21 | font.setWeight(75) 22 | self.label_title.setFont(font) 23 | self.label_title.setAlignment(QtCore.Qt.AlignCenter) 24 | self.label_title.setObjectName("label_title") 25 | self.pushButton_open_file = QtWidgets.QPushButton(Form) 26 | self.pushButton_open_file.setGeometry(QtCore.QRect(40, 90, 111, 28)) 27 | self.pushButton_open_file.setCheckable(False) 28 | self.pushButton_open_file.setDefault(True) 29 | self.pushButton_open_file.setObjectName("pushButton_open_file") 30 | self.label_image_1 = QtWidgets.QLabel(Form) 31 | self.label_image_1.setGeometry(QtCore.QRect(210, 10, 700, 700)) 32 | font = QtGui.QFont() 33 | font.setFamily("Agency FB") 34 | font.setPointSize(14) 35 | font.setBold(True) 36 | font.setWeight(75) 37 | self.label_image_1.setFont(font) 38 | self.label_image_1.setFrameShape(QtWidgets.QFrame.Box) 39 | self.label_image_1.setFrameShadow(QtWidgets.QFrame.Raised) 40 | self.label_image_1.setScaledContents(False) 41 | self.label_image_1.setAlignment(QtCore.Qt.AlignCenter) 42 | self.label_image_1.setObjectName("label_image_1") 43 | self.pushButton_video_captrue = QtWidgets.QPushButton(Form) 44 | self.pushButton_video_captrue.setGeometry(QtCore.QRect(40, 140, 111, 81)) 45 | self.pushButton_video_captrue.setObjectName("pushButton_video_captrue") 46 | self.groupBox = QtWidgets.QGroupBox(Form) 47 | self.groupBox.setGeometry(QtCore.QRect(30, 260, 151, 81)) 48 | self.groupBox.setObjectName("groupBox") 49 | self.label = QtWidgets.QLabel(self.groupBox) 50 | self.label.setGeometry(QtCore.QRect(40, 40, 72, 15)) 51 | self.label.setAlignment(QtCore.Qt.AlignCenter) 52 | self.label.setObjectName("label") 53 | 54 | self.retranslateUi(Form) 55 | QtCore.QMetaObject.connectSlotsByName(Form) 56 | 57 | def retranslateUi(self, Form): 58 | _translate = QtCore.QCoreApplication.translate 59 | Form.setWindowTitle(_translate("Form", "人脸检测")) 60 | self.label_title.setText(_translate("Form", "人脸检测")) 61 | self.pushButton_open_file.setText(_translate("Form", "打开图片")) 62 | self.label_image_1.setText(_translate("Form", "帧预览")) 63 | self.pushButton_video_captrue.setText(_translate("Form", "开始捕捉摄像头")) 64 | self.groupBox.setTitle(_translate("Form", "当前帧人脸数量:")) 65 | self.label.setText(_translate("Form", "0")) 66 | 67 | -------------------------------------------------------------------------------- /test_image/cameraman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/cameraman.png -------------------------------------------------------------------------------- /test_image/coins.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/coins.jpg -------------------------------------------------------------------------------- /test_image/contours.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/contours.png -------------------------------------------------------------------------------- /test_image/hezhao.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/hezhao.jpg -------------------------------------------------------------------------------- /test_image/lena-low-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/lena-low-light.png -------------------------------------------------------------------------------- /test_image/lena-low_duibi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/lena-low_duibi.png -------------------------------------------------------------------------------- /test_image/lena.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/lena.png -------------------------------------------------------------------------------- /test_image/lenanoise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/lenanoise.png -------------------------------------------------------------------------------- /test_image/my_mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/my_mask.png -------------------------------------------------------------------------------- /test_image/rice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/rice.png -------------------------------------------------------------------------------- /test_image/touxiang1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/touxiang1.jpg -------------------------------------------------------------------------------- /test_image/web_img1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/inferno0303/ImageProcessing-ClientApp/ec7869e32ac79865fa4701f05b847cdedb26bf5a/test_image/web_img1.jpg -------------------------------------------------------------------------------- /ui_xml/ui_main_window.ui: -------------------------------------------------------------------------------- 1 | 2 |