├── .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 | "

本设计利用PyCharmQT 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 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 733 10 | 546 11 | 12 | 13 | 14 | 图像处理仿真系统 15 | 16 | 17 | 18 | 19 | 220 20 | 10 21 | 291 22 | 61 23 | 24 | 25 | 26 | 27 | 黑体 28 | 20 29 | 50 30 | false 31 | 32 | 33 | 34 | 图像处理仿真系统 35 | 36 | 37 | Qt::AlignCenter 38 | 39 | 40 | 41 | 42 | 43 | 30 44 | 130 45 | 331 46 | 261 47 | 48 | 49 | 50 | 图像变换 51 | 52 | 53 | 54 | 55 | 40 56 | 50 57 | 111 58 | 71 59 | 60 | 61 | 62 | 色彩空间转换 63 | 64 | 65 | 66 | 67 | 68 | 170 69 | 50 70 | 111 71 | 71 72 | 73 | 74 | 75 | 图像缩放剪裁 76 | 77 | 78 | 79 | 80 | 81 | 40 82 | 140 83 | 111 84 | 71 85 | 86 | 87 | 88 | 图像加噪平滑 89 | 90 | 91 | 92 | 93 | 94 | 170 95 | 140 96 | 111 97 | 71 98 | 99 | 100 | 101 | 图像锐化 102 | 103 | 104 | 105 | 106 | 107 | 108 | 380 109 | 130 110 | 331 111 | 261 112 | 113 | 114 | 115 | 应用实例 116 | 117 | 118 | 119 | 120 | 180 121 | 140 122 | 111 123 | 71 124 | 125 | 126 | 127 | 人脸检测 128 | 129 | 130 | 131 | 132 | 133 | 180 134 | 50 135 | 111 136 | 71 137 | 138 | 139 | 140 | 图像压缩 141 | 142 | 143 | 144 | 145 | 146 | 50 147 | 50 148 | 111 149 | 71 150 | 151 | 152 | 153 | 直方图变换 154 | 155 | 156 | 157 | 158 | 159 | 50 160 | 140 161 | 111 162 | 71 163 | 164 | 165 | 166 | 边缘检测 167 | 168 | 169 | 170 | 171 | 172 | 173 | 560 174 | 430 175 | 111 176 | 71 177 | 178 | 179 | 180 | 关于 181 | 182 | 183 | 184 | 185 | 186 | 187 | -------------------------------------------------------------------------------- /ui_xml/ui_sub_window_1.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1158 10 | 789 11 | 12 | 13 | 14 | 图像色彩空间转换 15 | 16 | 17 | 18 | 19 | 810 20 | 10 21 | 321 22 | 41 23 | 24 | 25 | 26 | 27 | Agency FB 28 | 22 29 | 75 30 | true 31 | 32 | 33 | 34 | 图像色彩空间转换 35 | 36 | 37 | Qt::AlignCenter 38 | 39 | 40 | 41 | 42 | 43 | 240 44 | 60 45 | 900 46 | 700 47 | 48 | 49 | 50 | 51 | Agency FB 52 | 14 53 | 75 54 | true 55 | 56 | 57 | 58 | QFrame::Box 59 | 60 | 61 | QFrame::Raised 62 | 63 | 64 | 图片将显示在这里 65 | 66 | 67 | Qt::AlignCenter 68 | 69 | 70 | 71 | 72 | 73 | 20 74 | 20 75 | 191 76 | 28 77 | 78 | 79 | 80 | 打开图片 81 | 82 | 83 | false 84 | 85 | 86 | true 87 | 88 | 89 | 90 | 91 | 92 | 10 93 | 170 94 | 221 95 | 81 96 | 97 | 98 | 99 | 灰度转换 100 | 101 | 102 | 103 | false 104 | 105 | 106 | 107 | 50 108 | 30 109 | 121 110 | 28 111 | 112 | 113 | 114 | 灰度转换 115 | 116 | 117 | 118 | 119 | 120 | 121 | 10 122 | 290 123 | 221 124 | 101 125 | 126 | 127 | 128 | 二值化 129 | 130 | 131 | 132 | 133 | 20 134 | 20 135 | 91 136 | 21 137 | 138 | 139 | 140 | 设置阈值: 141 | 142 | 143 | 144 | 145 | false 146 | 147 | 148 | 149 | 50 150 | 60 151 | 121 152 | 28 153 | 154 | 155 | 156 | 二值化转换 157 | 158 | 159 | 160 | 161 | 162 | 135 163 | 20 164 | 61 165 | 22 166 | 167 | 168 | 169 | 255 170 | 171 | 172 | 127 173 | 174 | 175 | 176 | 177 | 178 | 179 | 40 180 | 80 181 | 149 182 | 51 183 | 184 | 185 | 186 | 187 | 188 | 189 | false 190 | 191 | 192 | 193 | Agency FB 194 | 9 195 | 196 | 197 | 198 | 当前色彩空间: 199 | 200 | 201 | Qt::AlignCenter 202 | 203 | 204 | 205 | 206 | 207 | 208 | false 209 | 210 | 211 | 212 | Agency FB 213 | 214 | 215 | 216 | 217 | 218 | 219 | Qt::AlignCenter 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | false 228 | 229 | 230 | 231 | 60 232 | 430 233 | 121 234 | 28 235 | 236 | 237 | 238 | 恢复默认 239 | 240 | 241 | 242 | 243 | 244 | 245 | -------------------------------------------------------------------------------- /ui_xml/ui_sub_window_10.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 686 10 | 524 11 | 12 | 13 | 14 | 关于本软件 15 | 16 | 17 | 18 | 19 | 210 20 | 30 21 | 271 22 | 61 23 | 24 | 25 | 26 | 27 | 黑体 28 | 12 29 | 30 | 31 | 32 | 1561130423-阳旭 的毕业设计 33 | 34 | 35 | Qt::AlignCenter 36 | 37 | 38 | 39 | 40 | 41 | 100 42 | 110 43 | 491 44 | 261 45 | 46 | 47 | 48 | 49 | 黑体 50 | 10 51 | 52 | 53 | 54 | Qt::StrongFocus 55 | 56 | 57 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> 58 | <html><head><meta name="qrichtext" content="1" /><style type="text/css"> 59 | p, li { white-space: pre-wrap; } 60 | </style></head><body style=" font-family:'黑体'; font-size:10pt; font-weight:400; font-style:normal;"> 61 | <p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'宋体';">本课题针对图像处理的难点,设计了一款界面友好的图像处理仿真系统,意在帮助初学者形象的理解图像处理所涉及的部分知识点。</span></p> 62 | <p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'宋体';">该软件包含常见的图像处理实例,例如图像缩放、加噪、平滑锐化、直方图均衡、压缩编码,边缘检测、人脸检测等。这些模块涉及到较多图像处理知识,通过每个模块设计的实例,循序渐进的让初学者加深理解图像处理方法间的联系,激发初学者对图像处理的兴趣。</span></p> 63 | <p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'宋体';">本设计利用</span><span style=" font-family:'Times New Roman,serif';">PyCharm</span><span style=" font-family:'宋体';">和</span><span style=" font-family:'Times New Roman,serif';">QT Designer</span><span style=" font-family:'宋体';">开发平台,基于</span><span style=" font-family:'Times New Roman,serif';">Python</span><span style=" font-family:'宋体';">编程语言以及</span><span style=" font-family:'Times New Roman,serif';">OpenCV</span><span style=" font-family:'宋体';">计算机视觉库,利用</span><span style=" font-family:'Times New Roman,serif';">Qt5</span><span style=" font-family:'宋体';">作为</span><span style=" font-family:'Times New Roman,serif';">GUI</span><span style=" font-family:'宋体';">框架,构建了一个兼容</span><span style=" font-family:'Times New Roman,serif';">Windows-x86</span><span style=" font-family:'宋体';">平台的软件。</span></p></body></html> 64 | 65 | 66 | 67 | 68 | 69 | 490 70 | 430 71 | 101 72 | 41 73 | 74 | 75 | 76 | 77 | 黑体 78 | 10 79 | 80 | 81 | 82 | 2019-06-03 83 | 84 | 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /ui_xml/ui_sub_window_2.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1158 10 | 779 11 | 12 | 13 | 14 | 图像的缩放与裁切 15 | 16 | 17 | 18 | 19 | 850 20 | 10 21 | 281 22 | 41 23 | 24 | 25 | 26 | 27 | Agency FB 28 | 22 29 | 75 30 | true 31 | 32 | 33 | 34 | 图像缩放与裁切 35 | 36 | 37 | Qt::AlignCenter 38 | 39 | 40 | 41 | 42 | 43 | 240 44 | 60 45 | 900 46 | 700 47 | 48 | 49 | 50 | 51 | Agency FB 52 | 14 53 | 75 54 | true 55 | 56 | 57 | 58 | QFrame::Box 59 | 60 | 61 | QFrame::Raised 62 | 63 | 64 | 图片将显示在这里 65 | 66 | 67 | Qt::AlignCenter 68 | 69 | 70 | 71 | 72 | 73 | 20 74 | 20 75 | 191 76 | 28 77 | 78 | 79 | 80 | 打开图片 81 | 82 | 83 | false 84 | 85 | 86 | true 87 | 88 | 89 | 90 | 91 | 92 | 10 93 | 70 94 | 211 95 | 191 96 | 97 | 98 | 99 | 缩放控制 100 | 101 | 102 | 103 | 104 | 30 105 | 20 106 | 151 107 | 151 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | false 117 | 118 | 119 | 120 | Agency FB 121 | 9 122 | 123 | 124 | 125 | 缩放系数: 126 | 127 | 128 | Qt::AlignCenter 129 | 130 | 131 | 132 | 133 | 134 | 135 | false 136 | 137 | 138 | 139 | Agency FB 140 | 141 | 142 | 143 | 144 | 145 | 146 | Qt::AlignCenter 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 放大 156 | 157 | 158 | 159 | 160 | 161 | 162 | 缩小 163 | 164 | 165 | 166 | 167 | 168 | 169 | 默认大小 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 10 180 | 290 181 | 211 182 | 251 183 | 184 | 185 | 186 | 裁切控制 187 | 188 | 189 | 190 | 191 | 10 192 | 30 193 | 191 194 | 151 195 | 196 | 197 | 198 | 199 | 200 | 201 | false 202 | 203 | 204 | 205 | Agency FB 206 | 9 207 | 208 | 209 | 210 | 原图X轴*Y轴: 211 | 212 | 213 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | Agency FB 224 | 9 225 | 226 | 227 | 228 | 锚点坐标 229 | 230 | 231 | 232 | 233 | 234 | 235 | 99 236 | 237 | 238 | 239 | 240 | 241 | 242 | 99 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | Agency FB 255 | 9 256 | 257 | 258 | 259 | X轴偏移 260 | 261 | 262 | 263 | 264 | 265 | 266 | 99 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | Agency FB 279 | 9 280 | 281 | 282 | 283 | Y轴偏移 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 20 298 | 200 299 | 171 300 | 28 301 | 302 | 303 | 304 | 图片裁切 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | -------------------------------------------------------------------------------- /ui_xml/ui_sub_window_3.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1334 10 | 770 11 | 12 | 13 | 14 | 图像的加噪和平滑 15 | 16 | 17 | 18 | 19 | 650 20 | 20 21 | 361 22 | 201 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 10 32 | 100 33 | 161 34 | 91 35 | 36 | 37 | 38 | 39 | Agency FB 40 | 8 41 | 42 | 43 | 44 | 中值滤波 45 | 46 | 47 | 48 | 49 | 10 50 | 20 51 | 51 52 | 21 53 | 54 | 55 | 56 | 核大小: 57 | 58 | 59 | 60 | 61 | 62 | 100 63 | 20 64 | 46 65 | 22 66 | 67 | 68 | 69 | 3 70 | 71 | 72 | 2 73 | 74 | 75 | 3 76 | 77 | 78 | 79 | 80 | 81 | 30 82 | 50 83 | 111 84 | 28 85 | 86 | 87 | 88 | 开始处理 89 | 90 | 91 | 92 | 93 | 94 | 95 | 190 96 | 10 97 | 161 98 | 91 99 | 100 | 101 | 102 | 103 | Agency FB 104 | 8 105 | 106 | 107 | 108 | 高斯滤波 109 | 110 | 111 | 112 | 113 | 10 114 | 20 115 | 51 116 | 21 117 | 118 | 119 | 120 | 核大小: 121 | 122 | 123 | 124 | 125 | 126 | 100 127 | 20 128 | 46 129 | 22 130 | 131 | 132 | 133 | 3 134 | 135 | 136 | 2 137 | 138 | 139 | 3 140 | 141 | 142 | 143 | 144 | 145 | 30 146 | 50 147 | 111 148 | 28 149 | 150 | 151 | 152 | 开始处理 153 | 154 | 155 | 156 | 157 | 158 | 159 | 10 160 | 10 161 | 161 162 | 91 163 | 164 | 165 | 166 | 167 | Agency FB 168 | 8 169 | 170 | 171 | 172 | 均值滤波 173 | 174 | 175 | 176 | 177 | 10 178 | 20 179 | 51 180 | 21 181 | 182 | 183 | 184 | 核大小: 185 | 186 | 187 | 188 | 189 | 190 | 100 191 | 20 192 | 46 193 | 22 194 | 195 | 196 | 197 | 3 198 | 199 | 200 | 2 201 | 202 | 203 | 3 204 | 205 | 206 | 207 | 208 | 209 | 30 210 | 50 211 | 111 212 | 28 213 | 214 | 215 | 216 | 开始处理 217 | 218 | 219 | 220 | 221 | 222 | 223 | 190 224 | 100 225 | 161 226 | 91 227 | 228 | 229 | 230 | 231 | Agency FB 232 | 8 233 | 234 | 235 | 236 | 双边滤波 237 | 238 | 239 | 240 | 241 | 30 242 | 30 243 | 111 244 | 28 245 | 246 | 247 | 248 | 开始处理 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 30 257 | 30 258 | 101 259 | 31 260 | 261 | 262 | 263 | 打开图片 264 | 265 | 266 | false 267 | 268 | 269 | true 270 | 271 | 272 | 273 | 274 | 275 | 150 276 | 20 277 | 461 278 | 201 279 | 280 | 281 | 282 | 283 | Agency FB 284 | 9 285 | 50 286 | false 287 | 288 | 289 | 290 | 291 | 292 | 293 | false 294 | 295 | 296 | false 297 | 298 | 299 | 300 | 301 | 10 302 | 10 303 | 141 304 | 181 305 | 306 | 307 | 308 | 309 | Agency FB 310 | 7 311 | 312 | 313 | 314 | 椒盐噪声 315 | 316 | 317 | 318 | 319 | 10 320 | 30 321 | 41 322 | 21 323 | 324 | 325 | 326 | 比例: 327 | 328 | 329 | 330 | 331 | 332 | 50 333 | 30 334 | 61 335 | 22 336 | 337 | 338 | 339 | 0.900000000000000 340 | 341 | 342 | 0.010000000000000 343 | 344 | 345 | 0.050000000000000 346 | 347 | 348 | 349 | 350 | 351 | 20 352 | 130 353 | 101 354 | 28 355 | 356 | 357 | 358 | 确定 359 | 360 | 361 | 362 | 363 | 364 | 20 365 | 60 366 | 101 367 | 19 368 | 369 | 370 | 371 | 椒盐(随机) 372 | 373 | 374 | true 375 | 376 | 377 | 378 | 379 | 380 | 20 381 | 80 382 | 101 383 | 19 384 | 385 | 386 | 387 | 盐(白点) 388 | 389 | 390 | 391 | 392 | 393 | 20 394 | 100 395 | 101 396 | 19 397 | 398 | 399 | 400 | 椒(黑点) 401 | 402 | 403 | 404 | 405 | 406 | 407 | 310 408 | 10 409 | 141 410 | 181 411 | 412 | 413 | 414 | 415 | Agency FB 416 | 7 417 | 418 | 419 | 420 | 乘积性噪声 421 | 422 | 423 | 424 | 425 | 20 426 | 130 427 | 101 428 | 28 429 | 430 | 431 | 432 | 确定 433 | 434 | 435 | 436 | 437 | 438 | 20 439 | 30 440 | 41 441 | 21 442 | 443 | 444 | 445 | 均值: 446 | 447 | 448 | 449 | 450 | 451 | 20 452 | 60 453 | 41 454 | 21 455 | 456 | 457 | 458 | 方差: 459 | 460 | 461 | 462 | 463 | 464 | 60 465 | 60 466 | 61 467 | 22 468 | 469 | 470 | 471 | 1.000000000000000 472 | 473 | 474 | 0.010000000000000 475 | 476 | 477 | 0.050000000000000 478 | 479 | 480 | 481 | 482 | 483 | 60 484 | 30 485 | 61 486 | 22 487 | 488 | 489 | 490 | -1.000000000000000 491 | 492 | 493 | 1.000000000000000 494 | 495 | 496 | 0.010000000000000 497 | 498 | 499 | 0.000000000000000 500 | 501 | 502 | 503 | 504 | 505 | 506 | 160 507 | 10 508 | 141 509 | 181 510 | 511 | 512 | 513 | 514 | Agency FB 515 | 7 516 | 517 | 518 | 519 | 高斯噪声 520 | 521 | 522 | 523 | 524 | 20 525 | 130 526 | 101 527 | 28 528 | 529 | 530 | 531 | 确定 532 | 533 | 534 | 535 | 536 | 537 | 60 538 | 30 539 | 61 540 | 22 541 | 542 | 543 | 544 | -1.000000000000000 545 | 546 | 547 | 1.000000000000000 548 | 549 | 550 | 0.010000000000000 551 | 552 | 553 | 0.000000000000000 554 | 555 | 556 | 557 | 558 | 559 | 20 560 | 30 561 | 41 562 | 21 563 | 564 | 565 | 566 | 均值: 567 | 568 | 569 | 570 | 571 | 572 | 60 573 | 60 574 | 61 575 | 22 576 | 577 | 578 | 579 | 1.000000000000000 580 | 581 | 582 | 0.010000000000000 583 | 584 | 585 | 0.050000000000000 586 | 587 | 588 | 589 | 590 | 591 | 20 592 | 60 593 | 41 594 | 21 595 | 596 | 597 | 598 | 方差: 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 30 607 | 110 608 | 100 609 | 20 610 | 611 | 612 | 613 | -1 614 | 615 | 616 | 10 617 | 618 | 619 | QComboBox::InsertAtBottom 620 | 621 | 622 | QComboBox::AdjustToContentsOnFirstShow 623 | 624 | 625 | true 626 | 627 | 628 | 0 629 | 630 | 631 | 632 | 633 | 634 | 30 635 | 80 636 | 100 637 | 31 638 | 639 | 640 | 641 | 添加噪声类型: 642 | 643 | 644 | 645 | 646 | 647 | 30 648 | 150 649 | 100 650 | 31 651 | 652 | 653 | 654 | 平滑滤波类型: 655 | 656 | 657 | 658 | 659 | 660 | 30 661 | 180 662 | 100 663 | 20 664 | 665 | 666 | 667 | -1 668 | 669 | 670 | 10 671 | 672 | 673 | true 674 | 675 | 676 | 0 677 | 678 | 679 | 680 | 681 | 682 | 1030 683 | 30 684 | 281 685 | 41 686 | 687 | 688 | 689 | 690 | Agency FB 691 | 22 692 | 75 693 | true 694 | 695 | 696 | 697 | 图像加噪和平滑 698 | 699 | 700 | Qt::AlignCenter 701 | 702 | 703 | 704 | 705 | 706 | 880 707 | 280 708 | 420 709 | 400 710 | 711 | 712 | 713 | 714 | Agency FB 715 | 12 716 | 75 717 | true 718 | 719 | 720 | 721 | QFrame::Box 722 | 723 | 724 | QFrame::Raised 725 | 726 | 727 | 平滑滤波 728 | 729 | 730 | Qt::AlignCenter 731 | 732 | 733 | 734 | 735 | 736 | 450 737 | 280 738 | 420 739 | 400 740 | 741 | 742 | 743 | 744 | Agency FB 745 | 12 746 | 75 747 | true 748 | 749 | 750 | 751 | QFrame::Box 752 | 753 | 754 | QFrame::Raised 755 | 756 | 757 | 加噪 758 | 759 | 760 | Qt::AlignCenter 761 | 762 | 763 | 764 | 765 | 766 | 20 767 | 280 768 | 420 769 | 400 770 | 771 | 772 | 773 | 774 | Agency FB 775 | 12 776 | 75 777 | true 778 | 779 | 780 | 781 | QFrame::Box 782 | 783 | 784 | QFrame::Raised 785 | 786 | 787 | 原图 788 | 789 | 790 | Qt::AlignCenter 791 | 792 | 793 | 794 | 795 | 796 | 797 | -------------------------------------------------------------------------------- /ui_xml/ui_sub_window_4.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1269 10 | 752 11 | 12 | 13 | 14 | 图像锐化 15 | 16 | 17 | 18 | 19 | 30 20 | 10 21 | 161 22 | 41 23 | 24 | 25 | 26 | 27 | Agency FB 28 | 22 29 | 75 30 | true 31 | 32 | 33 | 34 | 图像锐化 35 | 36 | 37 | Qt::AlignCenter 38 | 39 | 40 | 41 | 42 | 43 | 740 44 | 10 45 | 480 46 | 480 47 | 48 | 49 | 50 | 51 | Agency FB 52 | 14 53 | 75 54 | true 55 | 56 | 57 | 58 | QFrame::Box 59 | 60 | 61 | QFrame::Raised 62 | 63 | 64 | 处理后的图像 65 | 66 | 67 | Qt::AlignCenter 68 | 69 | 70 | 71 | 72 | 73 | 40 74 | 90 75 | 111 76 | 28 77 | 78 | 79 | 80 | 打开图片 81 | 82 | 83 | false 84 | 85 | 86 | true 87 | 88 | 89 | 90 | 91 | 92 | 10 93 | 230 94 | 171 95 | 151 96 | 97 | 98 | 99 | Sobel算子 100 | 101 | 102 | 103 | 104 | 40 105 | 110 106 | 93 107 | 28 108 | 109 | 110 | 111 | 确定 112 | 113 | 114 | 115 | 116 | 117 | 30 118 | 20 119 | 121 120 | 19 121 | 122 | 123 | 124 | X方向梯度 125 | 126 | 127 | 128 | 129 | 130 | 30 131 | 50 132 | 121 133 | 19 134 | 135 | 136 | 137 | Y方向梯度 138 | 139 | 140 | 141 | 142 | 143 | 30 144 | 80 145 | 121 146 | 19 147 | 148 | 149 | 150 | X和Y方向梯度 151 | 152 | 153 | 154 | 155 | 156 | 157 | 10 158 | 400 159 | 171 160 | 111 161 | 162 | 163 | 164 | Laplace算子 165 | 166 | 167 | 168 | 169 | 40 170 | 60 171 | 93 172 | 28 173 | 174 | 175 | 176 | 确定 177 | 178 | 179 | 180 | 181 | 182 | 100 183 | 30 184 | 46 185 | 22 186 | 187 | 188 | 189 | 1 190 | 191 | 192 | 2 193 | 194 | 195 | 1 196 | 197 | 198 | 199 | 200 | 201 | 30 202 | 30 203 | 51 204 | 21 205 | 206 | 207 | 208 | 核大小: 209 | 210 | 211 | 212 | 213 | 214 | 215 | 220 216 | 10 217 | 480 218 | 480 219 | 220 | 221 | 222 | 223 | Agency FB 224 | 14 225 | 75 226 | true 227 | 228 | 229 | 230 | QFrame::Box 231 | 232 | 233 | QFrame::Raised 234 | 235 | 236 | 原图 237 | 238 | 239 | false 240 | 241 | 242 | Qt::AlignCenter 243 | 244 | 245 | 246 | 247 | 248 | 10 249 | 530 250 | 271 251 | 211 252 | 253 | 254 | 255 | 自定义3*3卷积核 256 | 257 | 258 | 259 | 260 | 40 261 | 40 262 | 51 263 | 22 264 | 265 | 266 | 267 | 1 268 | 269 | 270 | -100.000000000000000 271 | 272 | 273 | 0.500000000000000 274 | 275 | 276 | 277 | 278 | 279 | 110 280 | 40 281 | 51 282 | 22 283 | 284 | 285 | 286 | 1 287 | 288 | 289 | -100.000000000000000 290 | 291 | 292 | 0.500000000000000 293 | 294 | 295 | -1.000000000000000 296 | 297 | 298 | 299 | 300 | 301 | 180 302 | 40 303 | 51 304 | 22 305 | 306 | 307 | 308 | 1 309 | 310 | 311 | -100.000000000000000 312 | 313 | 314 | 0.500000000000000 315 | 316 | 317 | 318 | 319 | 320 | 40 321 | 80 322 | 51 323 | 22 324 | 325 | 326 | 327 | 1 328 | 329 | 330 | -100.000000000000000 331 | 332 | 333 | 0.500000000000000 334 | 335 | 336 | -1.000000000000000 337 | 338 | 339 | 340 | 341 | 342 | 110 343 | 80 344 | 51 345 | 22 346 | 347 | 348 | 349 | 1 350 | 351 | 352 | -100.000000000000000 353 | 354 | 355 | 0.500000000000000 356 | 357 | 358 | 5.000000000000000 359 | 360 | 361 | 362 | 363 | 364 | 180 365 | 80 366 | 51 367 | 22 368 | 369 | 370 | 371 | 1 372 | 373 | 374 | -100.000000000000000 375 | 376 | 377 | 0.500000000000000 378 | 379 | 380 | -1.000000000000000 381 | 382 | 383 | 384 | 385 | 386 | 40 387 | 120 388 | 51 389 | 22 390 | 391 | 392 | 393 | 1 394 | 395 | 396 | -100.000000000000000 397 | 398 | 399 | 0.500000000000000 400 | 401 | 402 | 403 | 404 | 405 | 110 406 | 120 407 | 51 408 | 22 409 | 410 | 411 | 412 | 1 413 | 414 | 415 | -100.000000000000000 416 | 417 | 418 | 0.500000000000000 419 | 420 | 421 | -1.000000000000000 422 | 423 | 424 | 425 | 426 | 427 | 180 428 | 120 429 | 51 430 | 22 431 | 432 | 433 | 434 | 1 435 | 436 | 437 | -100.000000000000000 438 | 439 | 440 | 0.500000000000000 441 | 442 | 443 | 444 | 445 | 446 | 90 447 | 160 448 | 93 449 | 28 450 | 451 | 452 | 453 | 确定 454 | 455 | 456 | 457 | 458 | 459 | 460 | 40 461 | 180 462 | 111 463 | 31 464 | 465 | 466 | 467 | 468 | 469 | 470 | 40 471 | 140 472 | 111 473 | 31 474 | 475 | 476 | 477 | 选择锐化类型: 478 | 479 | 480 | 481 | 482 | 483 | 484 | -------------------------------------------------------------------------------- /ui_xml/ui_sub_window_5.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1269 10 | 797 11 | 12 | 13 | 14 | 直方图均衡 15 | 16 | 17 | 18 | 19 | 710 20 | 10 21 | 450 22 | 450 23 | 24 | 25 | 26 | 27 | Agency FB 28 | 14 29 | 75 30 | true 31 | 32 | 33 | 34 | QFrame::Box 35 | 36 | 37 | QFrame::Raised 38 | 39 | 40 | 处理后的图像 41 | 42 | 43 | Qt::AlignCenter 44 | 45 | 46 | 47 | 48 | 49 | 60 50 | 60 51 | 111 52 | 28 53 | 54 | 55 | 56 | 打开图片 57 | 58 | 59 | false 60 | 61 | 62 | true 63 | 64 | 65 | 66 | 67 | 68 | 250 69 | 10 70 | 450 71 | 450 72 | 73 | 74 | 75 | 76 | Agency FB 77 | 14 78 | 75 79 | true 80 | 81 | 82 | 83 | QFrame::Box 84 | 85 | 86 | QFrame::Raised 87 | 88 | 89 | 原图 90 | 91 | 92 | false 93 | 94 | 95 | Qt::AlignCenter 96 | 97 | 98 | 99 | 100 | 101 | 370 102 | 470 103 | 256 104 | 256 105 | 106 | 107 | 108 | 109 | Agency FB 110 | 14 111 | 75 112 | true 113 | 114 | 115 | 116 | QFrame::Box 117 | 118 | 119 | QFrame::Raised 120 | 121 | 122 | 原图直方图 123 | 124 | 125 | false 126 | 127 | 128 | Qt::AlignCenter 129 | 130 | 131 | 132 | 133 | 134 | 820 135 | 470 136 | 256 137 | 256 138 | 139 | 140 | 141 | 142 | Agency FB 143 | 14 144 | 75 145 | true 146 | 147 | 148 | 149 | QFrame::Box 150 | 151 | 152 | QFrame::Raised 153 | 154 | 155 | 处理后的图像直方图 156 | 157 | 158 | Qt::AlignCenter 159 | 160 | 161 | 162 | 163 | 164 | 30 165 | 140 166 | 181 167 | 131 168 | 169 | 170 | 171 | 亮度均衡 172 | 173 | 174 | 175 | 176 | 40 177 | 80 178 | 93 179 | 28 180 | 181 | 182 | 183 | 确定 184 | 185 | 186 | 187 | 188 | 189 | 100 190 | 40 191 | 46 192 | 22 193 | 194 | 195 | 196 | -255 197 | 198 | 199 | 255 200 | 201 | 202 | 20 203 | 204 | 205 | 206 | 207 | 208 | 20 209 | 40 210 | 61 211 | 21 212 | 213 | 214 | 215 | 均衡值 216 | 217 | 218 | 219 | 220 | 221 | 222 | 30 223 | 310 224 | 181 225 | 131 226 | 227 | 228 | 229 | 直方图均衡 230 | 231 | 232 | 233 | 234 | 40 235 | 60 236 | 93 237 | 28 238 | 239 | 240 | 241 | 确定 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | -------------------------------------------------------------------------------- /ui_xml/ui_sub_window_6.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1269 10 | 613 11 | 12 | 13 | 14 | 基于DCT的图像压缩 15 | 16 | 17 | 18 | 19 | 720 20 | 10 21 | 450 22 | 450 23 | 24 | 25 | 26 | 27 | Agency FB 28 | 14 29 | 75 30 | true 31 | 32 | 33 | 34 | QFrame::Box 35 | 36 | 37 | QFrame::Raised 38 | 39 | 40 | 处理后的图像 41 | 42 | 43 | Qt::AlignCenter 44 | 45 | 46 | 47 | 48 | 49 | 60 50 | 110 51 | 111 52 | 28 53 | 54 | 55 | 56 | 打开图片 57 | 58 | 59 | false 60 | 61 | 62 | true 63 | 64 | 65 | 66 | 67 | 68 | 250 69 | 10 70 | 450 71 | 450 72 | 73 | 74 | 75 | 76 | Agency FB 77 | 14 78 | 75 79 | true 80 | 81 | 82 | 83 | QFrame::Box 84 | 85 | 86 | QFrame::Raised 87 | 88 | 89 | 原图 90 | 91 | 92 | false 93 | 94 | 95 | Qt::AlignCenter 96 | 97 | 98 | 99 | 100 | 101 | 30 102 | 180 103 | 191 104 | 271 105 | 106 | 107 | 108 | DCT保留的频域系数 109 | 110 | 111 | 112 | 113 | 50 114 | 220 115 | 93 116 | 28 117 | 118 | 119 | 120 | 确定 121 | 122 | 123 | 124 | 125 | 126 | 40 127 | 40 128 | 111 129 | 151 130 | 131 | 132 | 133 | 134 | 135 | 136 | 1个系数 137 | 138 | 139 | 140 | 141 | 142 | 143 | 3个系数 144 | 145 | 146 | 147 | 148 | 149 | 150 | 6个系数 151 | 152 | 153 | true 154 | 155 | 156 | 157 | 158 | 159 | 160 | 10个系数 161 | 162 | 163 | 164 | 165 | 166 | 167 | 15个系数 168 | 169 | 170 | 171 | 172 | 173 | 174 | 21个系数 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 30 185 | 10 186 | 181 187 | 51 188 | 189 | 190 | 191 | 192 | 黑体 193 | 12 194 | 195 | 196 | 197 | 基于DCT的图像压缩 198 | 199 | 200 | 201 | 202 | 203 | 920 204 | 480 205 | 93 206 | 28 207 | 208 | 209 | 210 | 保存该图像 211 | 212 | 213 | 214 | 215 | 216 | 217 | -------------------------------------------------------------------------------- /ui_xml/ui_sub_window_7.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 1269 10 | 613 11 | 12 | 13 | 14 | 边缘检测 15 | 16 | 17 | 18 | 19 | 720 20 | 10 21 | 450 22 | 450 23 | 24 | 25 | 26 | 27 | Agency FB 28 | 14 29 | 75 30 | true 31 | 32 | 33 | 34 | QFrame::Box 35 | 36 | 37 | QFrame::Raised 38 | 39 | 40 | 处理后的图像 41 | 42 | 43 | Qt::AlignCenter 44 | 45 | 46 | 47 | 48 | 49 | 80 50 | 80 51 | 111 52 | 28 53 | 54 | 55 | 56 | 打开图片 57 | 58 | 59 | false 60 | 61 | 62 | true 63 | 64 | 65 | 66 | 67 | 68 | 250 69 | 10 70 | 450 71 | 450 72 | 73 | 74 | 75 | 76 | Agency FB 77 | 14 78 | 75 79 | true 80 | 81 | 82 | 83 | QFrame::Box 84 | 85 | 86 | QFrame::Raised 87 | 88 | 89 | 原图 90 | 91 | 92 | false 93 | 94 | 95 | Qt::AlignCenter 96 | 97 | 98 | 99 | 100 | 101 | 30 102 | 190 103 | 191 104 | 251 105 | 106 | 107 | 108 | Canny边缘检测 109 | 110 | 111 | 112 | 113 | 50 114 | 190 115 | 93 116 | 28 117 | 118 | 119 | 120 | 确定 121 | 122 | 123 | 124 | 125 | 126 | 120 127 | 50 128 | 61 129 | 41 130 | 131 | 132 | 133 | 255 134 | 135 | 136 | 150 137 | 138 | 139 | 140 | 141 | 142 | 10 143 | 50 144 | 81 145 | 41 146 | 147 | 148 | 149 | 低阈值抑制 150 | 151 | 152 | 153 | 154 | 155 | 120 156 | 110 157 | 61 158 | 41 159 | 160 | 161 | 162 | 255 163 | 164 | 165 | 200 166 | 167 | 168 | 169 | 170 | 171 | 10 172 | 110 173 | 81 174 | 41 175 | 176 | 177 | 178 | 高阈值抑制 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /ui_xml/ui_sub_window_8.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Form 4 | 5 | 6 | 7 | 0 8 | 0 9 | 921 10 | 726 11 | 12 | 13 | 14 | 人脸检测 15 | 16 | 17 | 18 | 19 | 20 20 | 20 21 | 161 22 | 41 23 | 24 | 25 | 26 | 27 | Agency FB 28 | 22 29 | 75 30 | true 31 | 32 | 33 | 34 | 人脸检测 35 | 36 | 37 | Qt::AlignCenter 38 | 39 | 40 | 41 | 42 | 43 | 40 44 | 90 45 | 111 46 | 28 47 | 48 | 49 | 50 | 打开图片 51 | 52 | 53 | false 54 | 55 | 56 | true 57 | 58 | 59 | 60 | 61 | 62 | 210 63 | 10 64 | 700 65 | 700 66 | 67 | 68 | 69 | 70 | Agency FB 71 | 14 72 | 75 73 | true 74 | 75 | 76 | 77 | QFrame::Box 78 | 79 | 80 | QFrame::Raised 81 | 82 | 83 | 帧预览 84 | 85 | 86 | false 87 | 88 | 89 | Qt::AlignCenter 90 | 91 | 92 | 93 | 94 | 95 | 40 96 | 140 97 | 111 98 | 81 99 | 100 | 101 | 102 | 开始捕捉摄像头 103 | 104 | 105 | 106 | 107 | 108 | 30 109 | 260 110 | 151 111 | 81 112 | 113 | 114 | 115 | 当前帧人脸数量: 116 | 117 | 118 | 119 | 120 | 40 121 | 40 122 | 72 123 | 15 124 | 125 | 126 | 127 | 0 128 | 129 | 130 | Qt::AlignCenter 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | --------------------------------------------------------------------------------