diff --git a/mainwindow.py b/mainwindow.py index 4048ad2..9557013 100644 --- a/mainwindow.py +++ b/mainwindow.py @@ -1,365 +1,365 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'mainwindow.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets -from PyQt5.QtWidgets import * -from PyQt5.QtCore import QCoreApplication -from PyQt5.QtWidgets import QFileDialog -from PyQt5 import QtCore, QtGui, QtWidgets -from PyQt5.QtGui import * -import sys -import os -import argparse -import cv2 -import numpy as np - - -class Ui_MainWindow(QMainWindow): - - def __init__(self): - super(Ui_MainWindow,self).__init__() - self.setupUi(self) - self.retranslateUi(self) - - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1304, 746) - self.centralWidget = QtWidgets.QWidget(MainWindow) - self.centralWidget.setObjectName("centralWidget") - self.toolbar = QtWidgets.QToolBox(self.centralWidget) - self.toolbar.setGeometry(QtCore.QRect(1040, 0, 251, 531)) - self.toolbar.setFrameShadow(QtWidgets.QFrame.Sunken) - self.toolbar.setObjectName("toolbar") - self.basicOperation = QtWidgets.QWidget() - self.basicOperation.setGeometry(QtCore.QRect(0, 0, 251, 375)) - self.basicOperation.setObjectName("basicOperation") - self.rotateButton = QtWidgets.QPushButton(self.basicOperation) - self.rotateButton.setGeometry(QtCore.QRect(80, 170, 112, 34)) - self.rotateButton.setObjectName("rotateButton") - self.rotateButton.clicked.connect(self.rotate) # 旋转信息槽 - self.greyButton = QtWidgets.QPushButton(self.basicOperation) - self.greyButton.setGeometry(QtCore.QRect(80, 220, 112, 34)) - self.greyButton.setObjectName("greyButton") - self.greyButton.clicked.connect(self.turngrey) # 灰度图像信息槽 - self.mirrorButton = QtWidgets.QPushButton(self.basicOperation) - self.mirrorButton.setGeometry(QtCore.QRect(80, 270, 112, 34)) - self.mirrorButton.setObjectName("mirrorButton") - self.mirrorButton.clicked.connect(self.mirror) # 镜像信息槽 - self.biggerButton = QtWidgets.QPushButton(self.basicOperation) - self.biggerButton.setGeometry(QtCore.QRect(40, 20, 75, 23)) - self.biggerButton.setObjectName("biggerButton") - self.biggerButton.clicked.connect(self.bigger) # 放大信息槽 - self.smallerButton = QtWidgets.QPushButton(self.basicOperation) - self.smallerButton.setGeometry(QtCore.QRect(150, 20, 75, 23)) - self.smallerButton.setObjectName("smallerButton") - self.smallerButton.clicked.connect(self.smaller)# 缩小信息槽 - self.upButton = QtWidgets.QPushButton(self.basicOperation) - self.upButton.setGeometry(QtCore.QRect(40, 70, 75, 23)) - self.upButton.setObjectName("upButton") - self.upButton.clicked.connect(self.up) # 上移信息槽 - self.downButton = QtWidgets.QPushButton(self.basicOperation) - self.downButton.setGeometry(QtCore.QRect(150, 70, 75, 23)) - self.downButton.setObjectName("downButton") - self.downButton.clicked.connect(self.down) # 下移信息槽 - self.leftButton = QtWidgets.QPushButton(self.basicOperation) - self.leftButton.setGeometry(QtCore.QRect(40, 110, 75, 23)) - self.leftButton.setObjectName("leftButton") - self.leftButton.clicked.connect(self.left) # 左移信息槽 - self.rightButton = QtWidgets.QPushButton(self.basicOperation) - self.rightButton.setGeometry(QtCore.QRect(150, 110, 75, 23)) - self.rightButton.setObjectName("rightButton") - self.rightButton.clicked.connect(self.right) # 右移信息槽 - self.toolbar.addItem(self.basicOperation, "") - self.edgeDitect = QtWidgets.QWidget() - self.edgeDitect.setGeometry(QtCore.QRect(0, 0, 98, 28)) - self.edgeDitect.setObjectName("edgeDitect") - self.edgeButton_4 = QtWidgets.QPushButton(self.edgeDitect) - self.edgeButton_4.setGeometry(QtCore.QRect(70, 20, 112, 34)) - self.edgeButton_4.setObjectName("edgeButton_4") - self.edgeButton_4.clicked.connect(self.edge) # 边缘检测信息槽 - self.toolbar.addItem(self.edgeDitect, "") - self.enhance = QtWidgets.QWidget() - self.enhance.setGeometry(QtCore.QRect(0, 0, 98, 28)) - self.enhance.setObjectName("enhance") - self.sharpenButton = QtWidgets.QPushButton(self.enhance) - self.sharpenButton.setGeometry(QtCore.QRect(80, 10, 112, 34)) - self.sharpenButton.setObjectName("sharpenButton") - self.sharpenButton.clicked.connect(self.sharpen) # 锐化信息槽 - self.smoothingButton = QtWidgets.QPushButton(self.enhance) - self.smoothingButton.setGeometry(QtCore.QRect(80, 60, 112, 34)) - self.smoothingButton.setObjectName("smoothingButton") - self.smoothingButton.clicked.connect(self.smoothing) # 平滑信息槽 - self.toolbar.addItem(self.enhance, "") - self.noiseReduction = QtWidgets.QWidget() - self.noiseReduction.setGeometry(QtCore.QRect(0, 0, 98, 28)) - self.noiseReduction.setObjectName("noiseReduction") - self.denoiseButton = QtWidgets.QPushButton(self.noiseReduction) - self.denoiseButton.setGeometry(QtCore.QRect(80, 20, 112, 34)) - self.denoiseButton.setObjectName("denoiseButton") - self.denoiseButton.clicked.connect(self.denoise) # 降噪信息槽 - self.toolbar.addItem(self.noiseReduction, "") - self.morphology = QtWidgets.QWidget() - self.morphology.setGeometry(QtCore.QRect(0, 0, 98, 28)) - self.morphology.setObjectName("morphology") - self.erosionButton = QtWidgets.QPushButton(self.morphology) - self.erosionButton.setGeometry(QtCore.QRect(90, 10, 91, 31)) - self.erosionButton.setObjectName("erosionButton") - self.erosionButton.clicked.connect(self.erosion) # 腐蚀信息槽 - self.dilationButton = QtWidgets.QPushButton(self.morphology) - self.dilationButton.setGeometry(QtCore.QRect(90, 70, 91, 31)) - self.dilationButton.setObjectName("dilationButton") - self.dilationButton.clicked.connect(self.dilation)# 膨胀信息槽 - self.toolbar.addItem(self.morphology, "") - self.filter = QtWidgets.QWidget() - self.filter.setGeometry(QtCore.QRect(0, 0, 251, 305)) - self.filter.setObjectName("filter") - self.oilpaintingButton = QtWidgets.QPushButton(self.filter) - self.oilpaintingButton.setGeometry(QtCore.QRect(70, 20, 111, 31)) - self.oilpaintingButton.setObjectName("oilpaintingButton") - self.oilpaintingButton.clicked.connect(self.oilpainting) # 油画滤镜信息槽 - self.watercolorButton = QtWidgets.QPushButton(self.filter) - self.watercolorButton.setGeometry(QtCore.QRect(70, 90, 111, 31)) - self.watercolorButton.setObjectName("watercolorButton") - self.watercolorButton.clicked.connect(self.watercolor) # 水彩滤镜信息槽 - self.toolbar.addItem(self.filter, "") - self.saveButton = QtWidgets.QPushButton(self.centralWidget) - self.saveButton.setGeometry(QtCore.QRect(1120, 540, 112, 34)) - self.saveButton.setObjectName("saveButton") - self.saveButton.clicked.connect(self.save) # 保存信息槽 - self.picture = QtWidgets.QLabel(self.centralWidget) - self.picture.setGeometry(QtCore.QRect(20, 10, 1011, 671)) - self.picture.setObjectName("picture") - MainWindow.setCentralWidget(self.centralWidget) - self.menuBar = QtWidgets.QMenuBar(MainWindow) - self.menuBar.setGeometry(QtCore.QRect(0, 0, 1304, 22)) - self.menuBar.setObjectName("menuBar") - self.file = QtWidgets.QMenu(self.menuBar) - self.file.setObjectName("file") - MainWindow.setMenuBar(self.menuBar) - self.mainToolBar = QtWidgets.QToolBar(MainWindow) - self.mainToolBar.setObjectName("mainToolBar") - MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar) - self.statusBar = QtWidgets.QStatusBar(MainWindow) - self.statusBar.setObjectName("statusBar") - MainWindow.setStatusBar(self.statusBar) - self.actionOpen_pic = QtWidgets.QAction(MainWindow) - self.actionOpen_pic.setObjectName("actionOpen_pic") - self.actionOpen_pic.triggered.connect(self.openpic) # 打开图片信息槽 - self.file.addAction(self.actionOpen_pic) - self.menuBar.addAction(self.file.menuAction()) - - self.retranslateUi(MainWindow) - self.toolbar.setCurrentIndex(0) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.rotateButton.setText(_translate("MainWindow", "旋转")) - self.greyButton.setText(_translate("MainWindow", "转为灰度图像")) - self.mirrorButton.setText(_translate("MainWindow", "镜像")) - self.biggerButton.setText(_translate("MainWindow", "放大")) - self.smallerButton.setText(_translate("MainWindow", "缩小")) - self.upButton.setText(_translate("MainWindow", "上移")) - self.downButton.setText(_translate("MainWindow", "下移")) - self.leftButton.setText(_translate("MainWindow", "左移")) - self.rightButton.setText(_translate("MainWindow", "右移")) - self.toolbar.setItemText(self.toolbar.indexOf(self.basicOperation), _translate("MainWindow", "图像基本操作")) - self.edgeButton_4.setText(_translate("MainWindow", "边缘检测")) - self.toolbar.setItemText(self.toolbar.indexOf(self.edgeDitect), _translate("MainWindow", "边缘检测")) - self.sharpenButton.setText(_translate("MainWindow", "图像锐化")) - self.smoothingButton.setText(_translate("MainWindow", "图像平滑")) - self.toolbar.setItemText(self.toolbar.indexOf(self.enhance), _translate("MainWindow", "图像增强")) - self.denoiseButton.setText(_translate("MainWindow", "去除噪声")) - self.toolbar.setItemText(self.toolbar.indexOf(self.noiseReduction), _translate("MainWindow", "噪声去除")) - self.erosionButton.setText(_translate("MainWindow", "图像腐蚀")) - self.dilationButton.setText(_translate("MainWindow", "图像膨胀")) - self.toolbar.setItemText(self.toolbar.indexOf(self.morphology), _translate("MainWindow", "图像形态学操作")) - self.oilpaintingButton.setText(_translate("MainWindow", "油画滤镜")) - self.watercolorButton.setText(_translate("MainWindow", "水彩滤镜")) - self.toolbar.setItemText(self.toolbar.indexOf(self.filter), _translate("MainWindow", "添加滤镜")) - self.saveButton.setText(_translate("MainWindow", "保存修改")) - self.picture.setText(_translate("MainWindow", "")) - self.file.setTitle(_translate("MainWindow", "文件")) - self.actionOpen_pic.setText(_translate("MainWindow", "打开图片")) - - def openpic(self): - print(cv2.__file__) - address = QFileDialog.getOpenFileName(self, "选取图片", "./", "Image files(*.png *.jpg *.jpeg *.gif);;all files(*.*)") - self.filename = address[0] - if self.filename: - print(self.filename) - self.pic = QtGui.QPixmap(self.filename) - self.picture.setPixmap(self.pic) - self.newPic = cv2.imread(self.filename) - # print("1") - cv2.imwrite('./tempPic.png', self.newPic) - # print("2") - - def save(self): - saveAddress = QFileDialog.getSaveFileName(self, "保存文件", "./", "Image files(*.png *.jpg *.jpeg *.gif);;all files(*.*)") - print(saveAddress[0]) - if saveAddress[0]: - self.newPic = cv2.imread('./tempPic.png') - cv2.imwrite(saveAddress[0], self.newPic) - - def rotate(self): - img = cv2.imread('./tempPic.png') # 图像旋转 - res = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) - cv2.imwrite("./tempPic.png", res) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def smoothing(self): - getpic = cv2.imread('./tempPic.png') # 图像平滑 - smoothpic = cv2.bilateralFilter(getpic, 5, 255, 10) # 双边滤波 - cv2.imwrite("./tempPic.png", smoothpic) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def sharpen(self): - getpic = cv2.imread('./tempPic.png') # 图像锐化 - sharpen_op = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], dtype=np.float32) - sharpen_image = cv2.filter2D(getpic, cv2.CV_32F, sharpen_op) - sharpen_image = cv2.convertScaleAbs(sharpen_image) - cv2.imwrite("./tempPic.png", sharpen_image) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def bigger(self): - getpic = cv2.imread('./tempPic.png') # 图像放大 - res = cv2.resize(getpic, None, fx=1.3, fy=1.3, interpolation=cv2.INTER_LINEAR) - cv2.imwrite("./tempPic.png", res) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def smaller(self): - getpic = cv2.imread('./tempPic.png') # 图像缩小 - res = cv2.resize(getpic, None, fx=3/4, fy=3/4, interpolation=cv2.INTER_LINEAR) - cv2.imwrite("./tempPic.png", res) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def oilpainting(self): - img = cv2.imread('./tempPic.png', 1) # 油画滤镜 - dst = cv2.xphoto.oilPainting(img, 3, 1) - cv2.imwrite("./tempPic.png", dst) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def watercolor(self): - img = cv2.imread('./tempPic.png', 1) # 水彩滤镜 - dst =cv2.stylization(img, sigma_s=200, sigma_r=0.4) - cv2.imwrite("./tempPic.png", dst) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def turngrey(self): - img = cv2.imread('./tempPic.png',cv2.IMREAD_GRAYSCALE) # 灰度图像 - cv2.imwrite("./tempPic.png", img) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def mirror(self): - img = cv2.imread('./tempPic.png', 1) # 左右镜像 - res = cv2.flip(img, 1) - cv2.imwrite("./tempPic.png", res) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def up(self): - img = cv2.imread('./tempPic.png', 1) # 图像上移 - rows, cols, channels = img.shape - M = np.float32([[1, 0, 0], [0, 1, -10]]) - res = cv2.warpAffine(img, M, (cols, rows)) - cv2.imwrite("./tempPic.png", res) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def down(self): - img = cv2.imread('./tempPic.png', 1) # 图像下移 - rows, cols, channels = img.shape - M = np.float32([[1, 0, 0], [0, 1, 10]]) - res = cv2.warpAffine(img, M, (cols, rows)) - cv2.imwrite("./tempPic.png", res) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def left(self): - img = cv2.imread('./tempPic.png', 1) # 图像左移 - rows, cols, channels = img.shape - M = np.float32([[1, 0, -10], [0, 1, 0]]) - res = cv2.warpAffine(img, M, (cols, rows)) - cv2.imwrite("./tempPic.png", res) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def right(self): - img = cv2.imread('./tempPic.png', 1) # 图像右移 - rows, cols, channels = img.shape - M = np.float32([[1, 0, 10], [0, 1, 0]]) - res = cv2.warpAffine(img, M, (cols, rows)) - cv2.imwrite("./tempPic.png", res) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def edge(self): - img = cv2.imread('./tempPic.png', 1) # Sobel边缘检测 - img1 = cv2.resize(img, dsize=None, fx=1, fy=1) - img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) - img3 = cv2.Sobel(img2, cv2.CV_64F, 0, 1, ksize=5) - cv2.imwrite("./tempPic.png", img3) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def denoise(self): - img = cv2.imread('./tempPic.png', 1) # 图片降噪 - dst = cv2.fastNlMeansDenoisingColored(img, None, 3, 3, 7, 21) - cv2.imwrite('./tempPic.png', dst) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def erosion(self): - img = cv2.imread('./tempPic.png', 1) # 图片腐蚀 - kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) - dst = cv2.erode(img, kernel) - cv2.imwrite('./tempPic.png', dst) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - - def dilation(self): - img = cv2.imread('./tempPic.png', 1) # 图片膨胀 - kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) - dst = cv2.dilate(img, kernel) - cv2.imwrite('./tempPic.png', dst) - self.newPic = cv2.imread('./tempPic.png') - self.pic = QtGui.QPixmap('./tempPic.png') - self.picture.setPixmap(self.pic) - -qapp = QApplication(sys.argv) -app = Ui_MainWindow() -app.show() -sys.exit(qapp.exec_()) +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'mainwindow.ui' +# +# Created by: PyQt5 UI code generator 5.15.4 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5.QtWidgets import * +from PyQt5.QtCore import QCoreApplication +from PyQt5.QtWidgets import QFileDialog +from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5.QtGui import * +import sys +import os +import argparse +import cv2 +import numpy as np + + +class Ui_MainWindow(QMainWindow): + + def __init__(self): + super(Ui_MainWindow,self).__init__() + self.setupUi(self) + self.retranslateUi(self) + + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(1304, 746) + self.centralWidget = QtWidgets.QWidget(MainWindow) + self.centralWidget.setObjectName("centralWidget") + self.toolbar = QtWidgets.QToolBox(self.centralWidget) + self.toolbar.setGeometry(QtCore.QRect(1040, 0, 251, 531)) + self.toolbar.setFrameShadow(QtWidgets.QFrame.Sunken) + self.toolbar.setObjectName("toolbar") + self.basicOperation = QtWidgets.QWidget() + self.basicOperation.setGeometry(QtCore.QRect(0, 0, 251, 375)) + self.basicOperation.setObjectName("basicOperation") + self.rotateButton = QtWidgets.QPushButton(self.basicOperation) + self.rotateButton.setGeometry(QtCore.QRect(80, 170, 112, 34)) + self.rotateButton.setObjectName("rotateButton") + self.rotateButton.clicked.connect(self.rotate) # 旋转信息槽 + self.greyButton = QtWidgets.QPushButton(self.basicOperation) + self.greyButton.setGeometry(QtCore.QRect(80, 220, 112, 34)) + self.greyButton.setObjectName("greyButton") + self.greyButton.clicked.connect(self.turngrey) # 灰度图像信息槽 + self.mirrorButton = QtWidgets.QPushButton(self.basicOperation) + self.mirrorButton.setGeometry(QtCore.QRect(80, 270, 112, 34)) + self.mirrorButton.setObjectName("mirrorButton") + self.mirrorButton.clicked.connect(self.mirror) # 镜像信息槽 + self.biggerButton = QtWidgets.QPushButton(self.basicOperation) + self.biggerButton.setGeometry(QtCore.QRect(40, 20, 75, 23)) + self.biggerButton.setObjectName("biggerButton") + self.biggerButton.clicked.connect(self.bigger) # 放大信息槽 + self.smallerButton = QtWidgets.QPushButton(self.basicOperation) + self.smallerButton.setGeometry(QtCore.QRect(150, 20, 75, 23)) + self.smallerButton.setObjectName("smallerButton") + self.smallerButton.clicked.connect(self.smaller)# 缩小信息槽 + self.upButton = QtWidgets.QPushButton(self.basicOperation) + self.upButton.setGeometry(QtCore.QRect(40, 70, 75, 23)) + self.upButton.setObjectName("upButton") + self.upButton.clicked.connect(self.up) # 上移信息槽 + self.downButton = QtWidgets.QPushButton(self.basicOperation) + self.downButton.setGeometry(QtCore.QRect(150, 70, 75, 23)) + self.downButton.setObjectName("downButton") + self.downButton.clicked.connect(self.down) # 下移信息槽 + self.leftButton = QtWidgets.QPushButton(self.basicOperation) + self.leftButton.setGeometry(QtCore.QRect(40, 110, 75, 23)) + self.leftButton.setObjectName("leftButton") + self.leftButton.clicked.connect(self.left) # 左移信息槽 + self.rightButton = QtWidgets.QPushButton(self.basicOperation) + self.rightButton.setGeometry(QtCore.QRect(150, 110, 75, 23)) + self.rightButton.setObjectName("rightButton") + self.rightButton.clicked.connect(self.right) # 右移信息槽 + self.toolbar.addItem(self.basicOperation, "") + self.edgeDitect = QtWidgets.QWidget() + self.edgeDitect.setGeometry(QtCore.QRect(0, 0, 98, 28)) + self.edgeDitect.setObjectName("edgeDitect") + self.edgeButton_4 = QtWidgets.QPushButton(self.edgeDitect) + self.edgeButton_4.setGeometry(QtCore.QRect(70, 20, 112, 34)) + self.edgeButton_4.setObjectName("edgeButton_4") + self.edgeButton_4.clicked.connect(self.edge) # 边缘检测信息槽 + self.toolbar.addItem(self.edgeDitect, "") + self.enhance = QtWidgets.QWidget() + self.enhance.setGeometry(QtCore.QRect(0, 0, 98, 28)) + self.enhance.setObjectName("enhance") + self.sharpenButton = QtWidgets.QPushButton(self.enhance) + self.sharpenButton.setGeometry(QtCore.QRect(80, 10, 112, 34)) + self.sharpenButton.setObjectName("sharpenButton") + self.sharpenButton.clicked.connect(self.sharpen) # 锐化信息槽 + self.smoothingButton = QtWidgets.QPushButton(self.enhance) + self.smoothingButton.setGeometry(QtCore.QRect(80, 60, 112, 34)) + self.smoothingButton.setObjectName("smoothingButton") + self.smoothingButton.clicked.connect(self.smoothing) # 平滑信息槽 + self.toolbar.addItem(self.enhance, "") + self.noiseReduction = QtWidgets.QWidget() + self.noiseReduction.setGeometry(QtCore.QRect(0, 0, 98, 28)) + self.noiseReduction.setObjectName("noiseReduction") + self.denoiseButton = QtWidgets.QPushButton(self.noiseReduction) + self.denoiseButton.setGeometry(QtCore.QRect(80, 20, 112, 34)) + self.denoiseButton.setObjectName("denoiseButton") + self.denoiseButton.clicked.connect(self.denoise) # 降噪信息槽 + self.toolbar.addItem(self.noiseReduction, "") + self.morphology = QtWidgets.QWidget() + self.morphology.setGeometry(QtCore.QRect(0, 0, 98, 28)) + self.morphology.setObjectName("morphology") + self.erosionButton = QtWidgets.QPushButton(self.morphology) + self.erosionButton.setGeometry(QtCore.QRect(90, 10, 91, 31)) + self.erosionButton.setObjectName("erosionButton") + self.erosionButton.clicked.connect(self.erosion) # 腐蚀信息槽 + self.dilationButton = QtWidgets.QPushButton(self.morphology) + self.dilationButton.setGeometry(QtCore.QRect(90, 70, 91, 31)) + self.dilationButton.setObjectName("dilationButton") + self.dilationButton.clicked.connect(self.dilation)# 膨胀信息槽 + self.toolbar.addItem(self.morphology, "") + self.filter = QtWidgets.QWidget() + self.filter.setGeometry(QtCore.QRect(0, 0, 251, 305)) + self.filter.setObjectName("filter") + self.oilpaintingButton = QtWidgets.QPushButton(self.filter) + self.oilpaintingButton.setGeometry(QtCore.QRect(70, 20, 111, 31)) + self.oilpaintingButton.setObjectName("oilpaintingButton") + self.oilpaintingButton.clicked.connect(self.oilpainting) # 油画滤镜信息槽 + self.watercolorButton = QtWidgets.QPushButton(self.filter) + self.watercolorButton.setGeometry(QtCore.QRect(70, 90, 111, 31)) + self.watercolorButton.setObjectName("watercolorButton") + self.watercolorButton.clicked.connect(self.watercolor) # 水彩滤镜信息槽 + self.toolbar.addItem(self.filter, "") + self.saveButton = QtWidgets.QPushButton(self.centralWidget) + self.saveButton.setGeometry(QtCore.QRect(1120, 540, 112, 34)) + self.saveButton.setObjectName("saveButton") + self.saveButton.clicked.connect(self.save) # 保存信息槽 + self.picture = QtWidgets.QLabel(self.centralWidget) + self.picture.setGeometry(QtCore.QRect(20, 10, 1011, 671)) + self.picture.setObjectName("picture") + MainWindow.setCentralWidget(self.centralWidget) + self.menuBar = QtWidgets.QMenuBar(MainWindow) + self.menuBar.setGeometry(QtCore.QRect(0, 0, 1304, 22)) + self.menuBar.setObjectName("menuBar") + self.file = QtWidgets.QMenu(self.menuBar) + self.file.setObjectName("file") + MainWindow.setMenuBar(self.menuBar) + self.mainToolBar = QtWidgets.QToolBar(MainWindow) + self.mainToolBar.setObjectName("mainToolBar") + MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar) + self.statusBar = QtWidgets.QStatusBar(MainWindow) + self.statusBar.setObjectName("statusBar") + MainWindow.setStatusBar(self.statusBar) + self.actionOpen_pic = QtWidgets.QAction(MainWindow) + self.actionOpen_pic.setObjectName("actionOpen_pic") + self.actionOpen_pic.triggered.connect(self.openpic) # 打开图片信息槽 + self.file.addAction(self.actionOpen_pic) + self.menuBar.addAction(self.file.menuAction()) + + self.retranslateUi(MainWindow) + self.toolbar.setCurrentIndex(0) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.rotateButton.setText(_translate("MainWindow", "旋转")) + self.greyButton.setText(_translate("MainWindow", "转为灰度图像")) + self.mirrorButton.setText(_translate("MainWindow", "镜像")) + self.biggerButton.setText(_translate("MainWindow", "放大")) + self.smallerButton.setText(_translate("MainWindow", "缩小")) + self.upButton.setText(_translate("MainWindow", "上移")) + self.downButton.setText(_translate("MainWindow", "下移")) + self.leftButton.setText(_translate("MainWindow", "左移")) + self.rightButton.setText(_translate("MainWindow", "右移")) + self.toolbar.setItemText(self.toolbar.indexOf(self.basicOperation), _translate("MainWindow", "图像基本操作")) + self.edgeButton_4.setText(_translate("MainWindow", "边缘检测")) + self.toolbar.setItemText(self.toolbar.indexOf(self.edgeDitect), _translate("MainWindow", "边缘检测")) + self.sharpenButton.setText(_translate("MainWindow", "图像锐化")) + self.smoothingButton.setText(_translate("MainWindow", "图像平滑")) + self.toolbar.setItemText(self.toolbar.indexOf(self.enhance), _translate("MainWindow", "图像增强")) + self.denoiseButton.setText(_translate("MainWindow", "去除噪声")) + self.toolbar.setItemText(self.toolbar.indexOf(self.noiseReduction), _translate("MainWindow", "噪声去除")) + self.erosionButton.setText(_translate("MainWindow", "图像腐蚀")) + self.dilationButton.setText(_translate("MainWindow", "图像膨胀")) + self.toolbar.setItemText(self.toolbar.indexOf(self.morphology), _translate("MainWindow", "图像形态学操作")) + self.oilpaintingButton.setText(_translate("MainWindow", "油画滤镜")) + self.watercolorButton.setText(_translate("MainWindow", "水彩滤镜")) + self.toolbar.setItemText(self.toolbar.indexOf(self.filter), _translate("MainWindow", "添加滤镜")) + self.saveButton.setText(_translate("MainWindow", "保存修改")) + self.picture.setText(_translate("MainWindow", "")) + self.file.setTitle(_translate("MainWindow", "文件")) + self.actionOpen_pic.setText(_translate("MainWindow", "打开图片")) + + def openpic(self): #打开需要修改的图像 + print(cv2.__file__) + address = QFileDialog.getOpenFileName(self, "选取图片", "./", "Image files(*.png *.jpg *.jpeg *.gif);;all files(*.*)") + self.filename = address[0] + if self.filename: + print(self.filename) + self.pic = QtGui.QPixmap(self.filename) + self.picture.setPixmap(self.pic) + self.newPic = cv2.imread(self.filename) + # print("1") + cv2.imwrite('./tempPic.png', self.newPic) + # print("2") + + def save(self): # 保存修改后的图像 + saveAddress = QFileDialog.getSaveFileName(self, "保存文件", "./", "Image files(*.png *.jpg *.jpeg *.gif);;all files(*.*)") + print(saveAddress[0]) + if saveAddress[0]: + self.newPic = cv2.imread('./tempPic.png') + cv2.imwrite(saveAddress[0], self.newPic) + + def rotate(self): + img = cv2.imread('./tempPic.png') # 图像旋转 + res = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) + cv2.imwrite("./tempPic.png", res) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def smoothing(self): + getpic = cv2.imread('./tempPic.png') # 图像平滑 + smoothpic = cv2.bilateralFilter(getpic, 5, 255, 10) # 双边滤波 + cv2.imwrite("./tempPic.png", smoothpic) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def sharpen(self): + getpic = cv2.imread('./tempPic.png') # 图像锐化 + sharpen_op = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], dtype=np.float32) + sharpen_image = cv2.filter2D(getpic, cv2.CV_32F, sharpen_op) + sharpen_image = cv2.convertScaleAbs(sharpen_image) + cv2.imwrite("./tempPic.png", sharpen_image) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def bigger(self): + getpic = cv2.imread('./tempPic.png') # 图像放大 + res = cv2.resize(getpic, None, fx=1.3, fy=1.3, interpolation=cv2.INTER_LINEAR) + cv2.imwrite("./tempPic.png", res) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def smaller(self): + getpic = cv2.imread('./tempPic.png') # 图像缩小 + res = cv2.resize(getpic, None, fx=3/4, fy=3/4, interpolation=cv2.INTER_LINEAR) + cv2.imwrite("./tempPic.png", res) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def oilpainting(self): + img = cv2.imread('./tempPic.png', 1) # 油画滤镜 + dst = cv2.xphoto.oilPainting(img, 3, 1) + cv2.imwrite("./tempPic.png", dst) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def watercolor(self): + img = cv2.imread('./tempPic.png', 1) # 水彩滤镜 + dst =cv2.stylization(img, sigma_s=200, sigma_r=0.4) + cv2.imwrite("./tempPic.png", dst) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def turngrey(self): + img = cv2.imread('./tempPic.png',cv2.IMREAD_GRAYSCALE) # 灰度图像 + cv2.imwrite("./tempPic.png", img) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def mirror(self): + img = cv2.imread('./tempPic.png', 1) # 左右镜像 + res = cv2.flip(img, 1) + cv2.imwrite("./tempPic.png", res) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def up(self): + img = cv2.imread('./tempPic.png', 1) # 图像上移 + rows, cols, channels = img.shape + M = np.float32([[1, 0, 0], [0, 1, -10]]) + res = cv2.warpAffine(img, M, (cols, rows)) + cv2.imwrite("./tempPic.png", res) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def down(self): + img = cv2.imread('./tempPic.png', 1) # 图像下移 + rows, cols, channels = img.shape + M = np.float32([[1, 0, 0], [0, 1, 10]]) + res = cv2.warpAffine(img, M, (cols, rows)) + cv2.imwrite("./tempPic.png", res) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def left(self): + img = cv2.imread('./tempPic.png', 1) # 图像左移 + rows, cols, channels = img.shape + M = np.float32([[1, 0, -10], [0, 1, 0]]) + res = cv2.warpAffine(img, M, (cols, rows)) + cv2.imwrite("./tempPic.png", res) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def right(self): + img = cv2.imread('./tempPic.png', 1) # 图像右移 + rows, cols, channels = img.shape + M = np.float32([[1, 0, 10], [0, 1, 0]]) + res = cv2.warpAffine(img, M, (cols, rows)) + cv2.imwrite("./tempPic.png", res) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def edge(self): + img = cv2.imread('./tempPic.png', 1) # Sobel边缘检测 + img1 = cv2.resize(img, dsize=None, fx=1, fy=1) + img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) + img3 = cv2.Sobel(img2, cv2.CV_64F, 0, 1, ksize=5) + cv2.imwrite("./tempPic.png", img3) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def denoise(self): + img = cv2.imread('./tempPic.png', 1) # 图片降噪 + dst = cv2.fastNlMeansDenoisingColored(img, None, 3, 3, 7, 21) + cv2.imwrite('./tempPic.png', dst) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def erosion(self): + img = cv2.imread('./tempPic.png', 1) # 图片腐蚀 + kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) + dst = cv2.erode(img, kernel) + cv2.imwrite('./tempPic.png', dst) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + + def dilation(self): + img = cv2.imread('./tempPic.png', 1) # 图片膨胀 + kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) + dst = cv2.dilate(img, kernel) + cv2.imwrite('./tempPic.png', dst) + self.newPic = cv2.imread('./tempPic.png') + self.pic = QtGui.QPixmap('./tempPic.png') + self.picture.setPixmap(self.pic) + +qapp = QApplication(sys.argv) +app = Ui_MainWindow() +app.show() +sys.exit(qapp.exec_())