parent
b1b3c13dda
commit
0d8ede5c39
@ -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_())
|
||||
|
Loading…
Reference in new issue