y轴方向(可选)
")) #提示设置
self.label_4.setText(_translate("MainWindow", "处理对象")) #文字标题
self.radioButton_4.setText(_translate("MainWindow", "源图像")) #处理对象选择单选按钮
self.radioButton_5.setText(_translate("MainWindow", "处理后图像")) #处理对象选择单选按钮
self.actionOpen.setText(_translate("MainWindow", "打开图像"))
self.actionOpen.setShortcut(_translate("MainWindow", "Ctrl+A"))
self.actionSave.setText(_translate("MainWindow", "保存图像"))
self.actionSave.setShortcut(_translate("MainWindow", "Ctrl+S"))
我们的用户界面只需要在上述代码中进行改动即可。首先,在代码开头导入我们需要的库:
# 导入所需库
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QFileInfo
from PyQt5.QtWidgets import QFileDialog
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import cv2
import numpy as np
import math
然后,在Ui_MainWindow类中写入我们需要实现功能的函数:
1. 我们先定义打开、保存文件的函数。要实现将读取的文件显示在我们的QLabel中,只需使用self.QLabelName.setPixmap(PictureName)即可,这里的QLabelName就是我们想要指定显示的QLabel框的名称,如果已经不记得类的名称了,可以在retranslateUi函数中查看一下,或者回到Qt Designer看看。
class Ui_MainWindow(object):
...
## 定义功能函数
#打开文件
def openfile(self):
global fname
#定义文件读取函数,解决中文路径读取错误的问题
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
fname, imgType = QFileDialog.getOpenFileName(None, "打开图片", "", "*;;*.png;;All Files(*)")
img = cv_imread(fname) # opencv读取图片
res = cv2.resize(img, (441, 341), interpolation=cv2.INTER_CUBIC) #用cv2.resize设置图片大小
self.img_o = cv2.cvtColor(res, cv2.COLOR_BGR2RGB) # opencv读取的bgr格式图片转换成rgb格式
_image = QtGui.QImage(self.img_o[:], self.img_o.shape[1], self.img_o.shape[0], self.img_o.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_6.setPixmap(jpg_out) # 设置图片显示
#保存文件
def savefile(self):
#fd,fp = QFileDialog.getSaveFileName(self.img2, "保存图片", "", "*;;*.png;;All Files(*)")
cv2.imwrite('result.jpg',self.img2)
2. 图像类型选择函数,其中二值化模式可通过滑动条选择阈值,但选择阈值后,必须按"q"或者"Esc"退出:
class Ui_MainWindow(object):
...
#选择图像为彩色模式
def color(self):
global fname
#定义文件读取函数,解决中文路径读取错误的问题
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
img = cv_imread(fname) # opencv读取图片
res = cv2.resize(img, (441, 341), interpolation=cv2.INTER_CUBIC) #用cv2.resize设置图片大小
self.img2 = cv2.cvtColor(res, cv2.COLOR_BGR2RGB) # opencv读取的bgr格式图片转换成rgb格式
_image = QtGui.QImage(self.img2[:], self.img2.shape[1], self.img2.shape[0], self.img2.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out) # 设置图片显示
#选择图像为二值化模式
def Binarization(self):
global fname
#定义文件读取函数,解决中文路径读取错误的问题
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
img = cv_imread(fname)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#二值化,需要注意的是,必须按"q"或者"Esc"退出
#设置窗口
cv2.namedWindow('imgBin')
#定义回调函数
def nothing(x):
pass
#创建滑动条,控制threshold
cv2.createTrackbar('threshold','imgBin',0,255,nothing)
while(1):
#返回滑动条所在位置的值
threshold=cv2.getTrackbarPos('threshold','imgBin')
#二值化处理
ret, imgBin = cv2.threshold(img.copy() ,threshold, 255, cv2.THRESH_BINARY)
#显示图片
cv2.imshow('imgBin',imgBin)
if cv2.waitKey(1)==ord('q') or cv2.waitKey(1)==27: #按q或Esc退出
break
cv2.destroyAllWindows()
res = cv2.resize(imgBin, (441, 341), interpolation=cv2.INTER_CUBIC)
self.img2 = cv2.cvtColor(res, cv2.COLOR_BGR2RGB) # opencv读取的bgr格式图片转换成rgb格式
_image = QtGui.QImage(self.img2[:], self.img2.shape[1], self.img2.shape[0], self.img2.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#选择图像为灰度模式
def gray(self):
global fname
#定义文件读取函数,解决中文路径读取错误的问题
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
img = cv_imread(fname)
img= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
res = cv2.resize(img, (441, 341), interpolation=cv2.INTER_CUBIC)
self.img2 = cv2.cvtColor(res, cv2.COLOR_BGR2RGB) # opencv读取的bgr格式图片转换成rgb格式
_image = QtGui.QImage(self.img2[:], self.img2.shape[1], self.img2.shape[0], self.img2.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
其中,cv2.resize()实现将图像变成显示框的大小(setupUi函数中,QLabel的后两个参数即大小:self.label_7.setGeometry(QtCore.QRect(570, 50, 441, 341)) ),label_7则是我们的“处理后对象”QLabel显示框。
3. 通过一点小操作,实现选择处理对象为源图像或者处理后图像(后续滤波操作,均输入img3,输出img2即可实现),并将处理对象显示在我们的“源图像”QLabel框中。
class Ui_MainWindow(object):
...
#选择处理对象为源图像
def yuan(self): #使用self.img3进行后续操作
self.img3 = self.img_o
_image = QtGui.QImage(self.img_o[:], self.img_o.shape[1], self.img_o.shape[0], self.img_o.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_6.setPixmap(jpg_out)
#选择处理对象为处理后的图像
def chuli(self):
self.img3 = self.img2
_image = QtGui.QImage(self.img2[:], self.img2.shape[1], self.img2.shape[0], self.img2.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_6.setPixmap(jpg_out)
4. 滤波操作函数:
class Ui_MainWindow(object):
...
#均值滤波
def junzhi(self):
img = cv2.cvtColor(self.img3, cv2.COLOR_BGR2GRAY)
k1 = int(self.textEdit_jz1.toPlainText()) #将输入值赋给k1
k2 = int(self.textEdit_jz2.toPlainText())
kSize = (k1, k2)
self.img2 = cv2.blur(img,kSize)
im = cv2.cvtColor(self.img2, cv2.COLOR_BGR2RGB)
self.img2 = im
_image = QtGui.QImage(im[:], im.shape[1], im.shape[0], im.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#高斯滤波
def gaussian(self):
img = cv2.cvtColor(self.img3, cv2.COLOR_BGR2GRAY)
k1 = int(self.textEdit_gs1.toPlainText())
k2 = int(self.textEdit_gs2.toPlainText())
kSize = (k1, k2)
sigmaX = int(self.textEdit_xbzc.toPlainText())
sigmaY = self.textEdit_ybzc.toPlainText()
if len(sigmaY) == 0: #实现输入框的可选填入
self.img2 = cv2.GaussianBlur(img, kSize, sigmaX)
else:
self.img2 = cv2.GaussianBlur(img, kSize, sigmaX,int(sigmaY))
im = cv2.cvtColor(self.img2, cv2.COLOR_BGR2RGB)
self.img2 = im
_image = QtGui.QImage(im[:], im.shape[1], im.shape[0], im.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#中值滤波
def median(self):
img = cv2.cvtColor(self.img3, cv2.COLOR_BGR2GRAY)
kSize = int(self.textEdit_zh.toPlainText())
self.img2 = cv2.medianBlur(img, kSize)
im = cv2.cvtColor(self.img2, cv2.COLOR_BGR2RGB)
self.img2 = im
_image = QtGui.QImage(im[:], im.shape[1], im.shape[0], im.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#方框滤波
def boxblur(self):
img = cv2.cvtColor(self.img3, cv2.COLOR_BGR2GRAY)
k1 = int(self.textEdit_fk1.toPlainText())
k2 = int(self.textEdit_fk2.toPlainText())
kSize = (k1, k2)
normalize = int(self.textEdit_jyh.toPlainText())
self.img2 = cv2.boxFilter(img, -1, kSize, normalize)
im = cv2.cvtColor(self.img2, cv2.COLOR_BGR2RGB)
self.img2 = im
_image = QtGui.QImage(im[:], im.shape[1], im.shape[0], im.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
通过self.textEditName.toPlainText()即可实现获取对应的输入框(textEditName)输入内容。
5. 函数写好后,在setupUi函数最后连接槽函数:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
...
## 连接槽函数
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.pushButton.clicked.connect(self.openfile)
self.pushButton_2.clicked.connect(self.savefile)
self.radioButton.clicked.connect(self.color)
self.radioButton_2.clicked.connect(self.gray)
self.radioButton_3.clicked.connect(self.Binarization)
self.radioButton_4.clicked.connect(self.yuan)
self.radioButton_5.clicked.connect(self.chuli)
self.pushButton_3.clicked.connect(self.junzhi)
self.pushButton_4.clicked.connect(self.boxblur)
self.pushButton_5.clicked.connect(self.median)
self.pushButton_6.clicked.connect(self.gaussian)
格式为:功能按钮类名.clicked.connect(函数名)。
至此,我们的界面就设计完成了!
最后,我们只需要输入:
app=QtWidgets.QApplication(sys.argv)
widget=QtWidgets.QMainWindow()
ui=Ui_MainWindow()
ui.setupUi(widget)
widget.show()
sys.exit(app.exec_())
就可以运行我们的主界面了。
整体代码
整体代码如下:
# 导入所需库
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QFileInfo
from PyQt5.QtWidgets import QFileDialog
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import cv2
import numpy as np
import math
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
## 设计主界面
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1125, 798)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(40, 10, 81, 18))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(580, 8, 121, 20))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(160, 420, 36, 34))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(581, 431, 76, 18))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(20, 420, 112, 34))
self.pushButton.setObjectName("pushButton")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(200, 420, 289, 34))
self.layoutWidget.setObjectName("layoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.radioButton_2 = QtWidgets.QRadioButton(self.layoutWidget)
self.radioButton_2.setObjectName("radioButton_2")
self.horizontalLayout.addWidget(self.radioButton_2)
self.radioButton = QtWidgets.QRadioButton(self.layoutWidget)
self.radioButton.setObjectName("radioButton")
self.horizontalLayout.addWidget(self.radioButton)
self.radioButton_3 = QtWidgets.QRadioButton(self.layoutWidget)
self.radioButton_3.setObjectName("radioButton_3")
self.horizontalLayout.addWidget(self.radioButton_3)
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(20, 610, 112, 34))
self.pushButton_2.setObjectName("pushButton_2")
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setGeometry(QtCore.QRect(30, 50, 441, 341))
self.label_6.setObjectName("label_6")
self.label_7 = QtWidgets.QLabel(self.centralwidget)
self.label_7.setGeometry(QtCore.QRect(570, 50, 441, 341))
self.label_7.setObjectName("label_7")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(580, 480, 112, 34))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(580, 550, 112, 34))
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_5 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_5.setGeometry(QtCore.QRect(580, 620, 112, 34))
self.pushButton_5.setObjectName("pushButton_5")
self.pushButton_6 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_6.setGeometry(QtCore.QRect(580, 700, 112, 34))
self.pushButton_6.setObjectName("pushButton_6")
self.label_8 = QtWidgets.QLabel(self.centralwidget)
self.label_8.setGeometry(QtCore.QRect(750, 430, 95, 18))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_8.setFont(font)
self.label_8.setObjectName("label_8")
self.textEdit_jz1 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_jz1.setGeometry(QtCore.QRect(750, 480, 41, 41))
self.textEdit_jz1.setObjectName("textEdit_jz1")
self.textEdit_fk1 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_fk1.setGeometry(QtCore.QRect(750, 550, 41, 41))
self.textEdit_fk1.setObjectName("textEdit_fk1")
self.textEdit_zh = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_zh.setGeometry(QtCore.QRect(750, 620, 41, 41))
self.textEdit_zh.setObjectName("textEdit_zh")
self.textEdit_gs1 = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit_gs1.setGeometry(QtCore.QRect(750, 700, 41, 41))
self.textEdit_gs1.setObjectName("textEdit_gs1")
self.label_9 = QtWidgets.QLabel(self.centralwidget)
self.label_9.setGeometry(QtCore.QRect(890, 670, 147, 18))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_9.setFont(font)
self.label_9.setObjectName("label_9")
self.textEdit_xbzc = QtWidgets.QTextEdit(self.centralwidget) #x轴方向标准差
self.textEdit_xbzc.setGeometry(QtCore.QRect(900, 700, 41, 41))
self.textEdit_xbzc.setObjectName("textEdit_xbzc")
self.textEdit_jyh = QtWidgets.QTextEdit(self.centralwidget) #均一化
self.textEdit_jyh.setGeometry(QtCore.QRect(930, 550, 41, 41))
self.textEdit_jyh.setObjectName("textEdit_jyh")
self.label_10 = QtWidgets.QLabel(self.centralwidget)
self.label_10.setGeometry(QtCore.QRect(920, 530, 71, 20))
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_10.setFont(font)
self.label_10.setObjectName("label_10")
self.textEdit_jz2 = QtWidgets.QTextEdit(self.centralwidget) #均值滤波
self.textEdit_jz2.setGeometry(QtCore.QRect(810, 480, 41, 41))
self.textEdit_jz2.setObjectName("textEdit_jz2")
self.textEdit_fk2 = QtWidgets.QTextEdit(self.centralwidget) #方框滤波
self.textEdit_fk2.setGeometry(QtCore.QRect(810, 550, 41, 41))
self.textEdit_fk2.setObjectName("textEdit_fk2")
self.textEdit_gs2 = QtWidgets.QTextEdit(self.centralwidget) #高斯滤波
self.textEdit_gs2.setGeometry(QtCore.QRect(810, 700, 41, 41))
self.textEdit_gs2.setObjectName("textEdit_gs2")
self.textEdit_ybzc = QtWidgets.QTextEdit(self.centralwidget) #y轴方向标准差
self.textEdit_ybzc.setGeometry(QtCore.QRect(960, 700, 41, 41))
self.textEdit_ybzc.setObjectName("textEdit_ybzc")
self.line = QtWidgets.QFrame(self.centralwidget)
self.line.setGeometry(QtCore.QRect(580, 450, 421, 16))
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.line_2 = QtWidgets.QFrame(self.centralwidget)
self.line_2.setGeometry(QtCore.QRect(580, 520, 421, 16))
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_2.setObjectName("line_2")
self.line_3 = QtWidgets.QFrame(self.centralwidget)
self.line_3.setGeometry(QtCore.QRect(580, 590, 421, 16))
self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_3.setObjectName("line_3")
self.line_4 = QtWidgets.QFrame(self.centralwidget)
self.line_4.setGeometry(QtCore.QRect(580, 660, 421, 16))
self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_4.setObjectName("line_4")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setGeometry(QtCore.QRect(160, 500, 306, 24))
self.widget.setObjectName("widget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.label_4 = QtWidgets.QLabel(self.widget)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.horizontalLayout_2.addWidget(self.label_4)
self.radioButton_4 = QtWidgets.QRadioButton(self.widget)
self.radioButton_4.setObjectName("radioButton_4")
self.horizontalLayout_2.addWidget(self.radioButton_4)
self.radioButton_5 = QtWidgets.QRadioButton(self.widget)
self.radioButton_5.setObjectName("radioButton_5")
self.horizontalLayout_2.addWidget(self.radioButton_5)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.actionOpen = QtWidgets.QAction(MainWindow)
self.actionOpen.setObjectName("actionOpen")
self.actionSave = QtWidgets.QAction(MainWindow)
self.actionSave.setObjectName("actionSave")
## 连接槽函数
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.pushButton.clicked.connect(self.openfile)
self.pushButton_2.clicked.connect(self.savefile)
self.radioButton.clicked.connect(self.color)
self.radioButton_2.clicked.connect(self.gray)
self.radioButton_3.clicked.connect(self.Binarization)
self.radioButton_4.clicked.connect(self.yuan)
self.radioButton_5.clicked.connect(self.chuli)
self.pushButton_3.clicked.connect(self.junzhi)
self.pushButton_4.clicked.connect(self.boxblur)
self.pushButton_5.clicked.connect(self.median)
self.pushButton_6.clicked.connect(self.gaussian)
## 定义功能函数
#打开文件
def openfile(self):
global fname
#定义文件读取函数,解决中文路径读取错误的问题
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
fname, imgType = QFileDialog.getOpenFileName(None, "打开图片", "", "*;;*.png;;All Files(*)")
img = cv_imread(fname) # opencv读取图片
res = cv2.resize(img, (441, 341), interpolation=cv2.INTER_CUBIC) #用cv2.resize设置图片大小
self.img_o = cv2.cvtColor(res, cv2.COLOR_BGR2RGB) # opencv读取的bgr格式图片转换成rgb格式
_image = QtGui.QImage(self.img_o[:], self.img_o.shape[1], self.img_o.shape[0], self.img_o.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_6.setPixmap(jpg_out) # 设置图片显示
#保存文件
def savefile(self):
#fd,fp = QFileDialog.getSaveFileName(self.img2, "保存图片", "", "*;;*.png;;All Files(*)")
cv2.imwrite('result.jpg',self.img2)
#选择处理对象为源图像
def yuan(self): #使用self.img3进行后续操作
self.img3 = self.img_o
_image = QtGui.QImage(self.img_o[:], self.img_o.shape[1], self.img_o.shape[0], self.img_o.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_6.setPixmap(jpg_out)
#选择处理对象为处理后的图像
def chuli(self):
self.img3 = self.img2
_image = QtGui.QImage(self.img2[:], self.img2.shape[1], self.img2.shape[0], self.img2.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_6.setPixmap(jpg_out)
#选择图像为彩色模式
def color(self):
global fname
#定义文件读取函数,解决中文路径读取错误的问题
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
img = cv_imread(fname) # opencv读取图片
res = cv2.resize(img, (441, 341), interpolation=cv2.INTER_CUBIC) #用cv2.resize设置图片大小
self.img2 = cv2.cvtColor(res, cv2.COLOR_BGR2RGB) # opencv读取的bgr格式图片转换成rgb格式
_image = QtGui.QImage(self.img2[:], self.img2.shape[1], self.img2.shape[0], self.img2.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out) # 设置图片显示
#选择图像为二值化模式
def Binarization(self):
global fname
#定义文件读取函数,解决中文路径读取错误的问题
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
img = cv_imread(fname)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#二值化,需要注意的是,必须按"q"或者"Esc"退出
#设置窗口
cv2.namedWindow('imgBin')
#定义回调函数
def nothing(x):
pass
#创建滑动条,控制threshold
cv2.createTrackbar('threshold','imgBin',0,255,nothing)
while(1):
#返回滑动条所在位置的值
threshold=cv2.getTrackbarPos('threshold','imgBin')
#二值化处理
ret, imgBin = cv2.threshold(img.copy() ,threshold, 255, cv2.THRESH_BINARY)
#显示图片
cv2.imshow('imgBin',imgBin)
if cv2.waitKey(1)==ord('q') or cv2.waitKey(1)==27: #按q或Esc退出
break
cv2.destroyAllWindows()
res = cv2.resize(imgBin, (441, 341), interpolation=cv2.INTER_CUBIC)
self.img2 = cv2.cvtColor(res, cv2.COLOR_BGR2RGB) # opencv读取的bgr格式图片转换成rgb格式
_image = QtGui.QImage(self.img2[:], self.img2.shape[1], self.img2.shape[0], self.img2.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#选择图像为灰度模式
def gray(self):
global fname
#定义文件读取函数,解决中文路径读取错误的问题
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
img = cv_imread(fname)
img= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
res = cv2.resize(img, (441, 341), interpolation=cv2.INTER_CUBIC)
self.img2 = cv2.cvtColor(res, cv2.COLOR_BGR2RGB) # opencv读取的bgr格式图片转换成rgb格式
_image = QtGui.QImage(self.img2[:], self.img2.shape[1], self.img2.shape[0], self.img2.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#均值滤波
def junzhi(self):
img = cv2.cvtColor(self.img3, cv2.COLOR_BGR2GRAY)
k1 = int(self.textEdit_jz1.toPlainText())
k2 = int(self.textEdit_jz2.toPlainText())
kSize = (k1, k2)
self.img2 = cv2.blur(img,kSize)
im = cv2.cvtColor(self.img2, cv2.COLOR_BGR2RGB)
self.img2 = im
_image = QtGui.QImage(im[:], im.shape[1], im.shape[0], im.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#高斯滤波
def gaussian(self):
img = cv2.cvtColor(self.img3, cv2.COLOR_BGR2GRAY)
k1 = int(self.textEdit_gs1.toPlainText())
k2 = int(self.textEdit_gs2.toPlainText())
kSize = (k1, k2)
sigmaX = int(self.textEdit_xbzc.toPlainText())
sigmaY = self.textEdit_ybzc.toPlainText()
if len(sigmaY) == 0:
self.img2 = cv2.GaussianBlur(img, kSize, sigmaX)
else:
self.img2 = cv2.GaussianBlur(img, kSize, sigmaX,int(sigmaY))
im = cv2.cvtColor(self.img2, cv2.COLOR_BGR2RGB)
self.img2 = im
_image = QtGui.QImage(im[:], im.shape[1], im.shape[0], im.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#中值滤波
def median(self):
img = cv2.cvtColor(self.img3, cv2.COLOR_BGR2GRAY)
kSize = int(self.textEdit_zh.toPlainText())
self.img2 = cv2.medianBlur(img, kSize)
im = cv2.cvtColor(self.img2, cv2.COLOR_BGR2RGB)
self.img2 = im
_image = QtGui.QImage(im[:], im.shape[1], im.shape[0], im.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#方框滤波
def boxblur(self):
img = cv2.cvtColor(self.img3, cv2.COLOR_BGR2GRAY)
k1 = int(self.textEdit_fk1.toPlainText())
k2 = int(self.textEdit_fk2.toPlainText())
kSize = (k1, k2)
normalize = int(self.textEdit_jyh.toPlainText())
self.img2 = cv2.boxFilter(img, -1, kSize, normalize)
im = cv2.cvtColor(self.img2, cv2.COLOR_BGR2RGB)
self.img2 = im
_image = QtGui.QImage(im[:], im.shape[1], im.shape[0], im.shape[1] * 3,
QtGui.QImage.Format_RGB888) # pyqt5转换成自己能放的图片格式
jpg_out = QtGui.QPixmap(_image) # 转换成QPixmap
self.label_7.setPixmap(jpg_out)
#命名
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "源图片"))
self.label_2.setText(_translate("MainWindow", "处理后图片"))
self.label_3.setText(_translate("MainWindow", "模式"))
self.label_5.setText(_translate("MainWindow", "滤波处理"))
self.pushButton.setText(_translate("MainWindow", "打开图像"))
self.radioButton_2.setText(_translate("MainWindow", "灰度"))
self.radioButton.setText(_translate("MainWindow", "彩色"))
self.radioButton_3.setText(_translate("MainWindow", "二值化"))
self.pushButton_2.setText(_translate("MainWindow", "保存图像"))
self.label_6.setText(_translate("MainWindow", "源图像"))
self.label_7.setText(_translate("MainWindow", "处理后图像"))
self.pushButton_3.setText(_translate("MainWindow", "均值滤波"))
self.pushButton_4.setText(_translate("MainWindow", "方框滤波"))
self.pushButton_5.setText(_translate("MainWindow", "中值滤波"))
self.pushButton_6.setText(_translate("MainWindow", "高斯滤波"))
self.label_8.setText(_translate("MainWindow", "模糊核大小"))
#增加文本提示
self.textEdit_jz1.setToolTip(_translate("MainWindow", "正奇数
"))
self.textEdit_fk1.setToolTip(_translate("MainWindow", "