You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

777 lines
31 KiB

from PyQt5 import QtGui
from PyQt5.QtWidgets import *
import cv2
import numpy as np
def init(self):
self.unit3_img1 = np.ndarray(())
self.unit3_img2 = np.ndarray(())
self.unit3_result1 = np.ndarray(())
self.unit3_img1_channel = 1
self.unit3_img2_channel = 1
self.unit3_result1_channel = 1
self.unit3_img3 = np.ndarray(())
self.unit3_result2 = np.ndarray(())
self.unit3_img3_channel = 1
self.unit3_result2_channel = 1
def unit3_img_refresh(self):
array = [self.unit3_img1, self.unit3_img2, self.unit3_result1, self.unit3_img3, self.unit3_result2]
array2 = [self.ui.label_35, self.ui.label_36, self.ui.label_29, self.ui.label_33, self.ui.label_31]
channel = [self.unit3_img1_channel,
self.unit3_img2_channel,
self.unit3_result1_channel,
self.unit3_img3_channel, self.unit3_result2_channel]
for index in range(len(array)):
M = np.float32([[1, 0, 0], [0, 1, 0]])
if array[index].size <=1 :
continue
print(array[index].shape)
index_h = array[index].shape[0]
index_w = array[index].shape[1]
if index_h / index_w == 250 / 200:
img = array[index].tobytes()
if channel[index] == 1:
image = QtGui.QImage(img, index_w, index_h, index_w * channel[index], QtGui.QImage.Format_Grayscale8)
pix = QtGui.QPixmap.fromImage(image)
scale_pix = pix.scaled(200, 250)
array2[index].setPixmap(scale_pix)
continue
elif channel[index] == 3:
image = QtGui.QImage(img, index_w, index_h, index_w * channel[index], QtGui.QImage.Format_BGR888)
pix = QtGui.QPixmap.fromImage(image)
scale_pix = pix.scaled(200, 250)
array2[index].setPixmap(scale_pix)
continue
elif index_h / index_w > 250 / 200:
h_ = index_h
w_ = int(index_h * 200 / 250 + 0.5)
M[0, 2] += (w_ - index_w) / 2
M[1, 2] += (h_ - index_h) / 2
else:
h_ = int(index_w * 250 / 200 + 0.5)
w_ = index_w
M[0, 2] += (w_ - index_w) / 2
M[1, 2] += (h_ - index_h) / 2
img = cv2.warpAffine(array[index], M, (w_, h_))
data = img.tobytes()
if channel[index] == 1:
image = QtGui.QImage(data, w_, h_, w_* channel[index], QtGui.QImage.Format_Grayscale8)
pix = QtGui.QPixmap.fromImage(image)
scale_pix = pix.scaled(200, 250)
array2[index].setPixmap(scale_pix)
continue
else:
image = QtGui.QImage(data, w_, h_, w_ * channel[index], QtGui.QImage.Format_BGR888)
pix = QtGui.QPixmap.fromImage(image)
scale_pix = pix.scaled(200, 250)
array2[index].setPixmap(scale_pix)
continue
return
def img_left_load1(self):
fileName, tmp = QFileDialog.getOpenFileName(self, '打开图像', 'Image', '*.png *.jpg *.bmp *.jpeg')
if fileName == '':
return
self.unit3_img1 = np.ndarray(())
self.unit3_result1 = np.ndarray(())
self.unit3_img1_channel = 1
self.unit3_result1_channel = 1
self.unit3_img1 = cv2.imread(fileName, -1)
if self.unit3_img1.size <= 1:
return
if len(self.unit3_img1.shape)==3:
self.unit3_img1_channel =3
if self.unit3_img1.shape[2]==4:
self.unit3_img1 = cv2.cvtColor(self.unit3_img1, cv2.COLOR_BGRA2BGR)
print(self.unit3_img1.shape)
unit3_img_refresh(self)
def img_left_load2(self):
fileName, tmp = QFileDialog.getOpenFileName(self, '打开图像', 'Image', '*.png *.jpg *.bmp *.jpeg')
if fileName == '':
return
self.unit3_img2 = np.ndarray(())
self.unit3_img2_channel = 1
self.unit3_img2 = cv2.imread(fileName, -1)
if self.unit3_img2.size <= 1:
return
if len(self.unit3_img2.shape) == 3:
self.unit3_img2_channel = 3
if self.unit3_img2.shape[2] == 4:
self.unit3_img2 = cv2.cvtColor(self.unit3_img2, cv2.COLOR_BGRA2BGR)
print(self.unit3_img2.shape)
unit3_img_refresh(self)
def ADD(self):
if self.unit3_img1.size>1 and self.unit3_img2.size>1 \
and self.unit3_img1_channel == self.unit3_img2_channel\
and self.unit3_img1.shape == self.unit3_img2.shape:
try:
self.unit3_result1 = cv2.add(src1=self.unit3_img1, src2=self.unit3_img2)
except:
msg_box = QMessageBox(QMessageBox.Warning, '图片异常', '请重新选择图片进行加操作')
msg_box.exec_()
if len(self.unit3_result1.shape) == 3:
self.unit3_result1_channel = 3
else:
self.unit3_result1_channel = 1
elif self.unit3_img1.size<=1 or self.unit3_img2.size<=1:
msg_box = QMessageBox(QMessageBox.Warning, '缺失图片', '请选择两张图片后再相加')
msg_box.exec_()
elif self.unit3_img1_channel != self.unit3_img2_channel:
msg_box = QMessageBox(QMessageBox.Warning, '通道不同', '彩色图与灰度图不能相加')
msg_box.exec_()
elif self.unit3_img1.shape != self.unit3_img2.shape:
msg_box = QMessageBox(QMessageBox.Warning, '图片尺寸不同', '尺寸不同的图像不能相加')
msg_box.exec_()
unit3_img_refresh(self)
def SUB(self):
if self.unit3_img1.size > 1 and self.unit3_img2.size > 1 \
and self.unit3_img1_channel == self.unit3_img2_channel \
and self.unit3_img1.shape == self.unit3_img2.shape:
try:
self.unit3_result1 = cv2.subtract(src1=self.unit3_img1, src2=self.unit3_img2)
except:
msg_box = QMessageBox(QMessageBox.Warning, '图片异常', '请重新选择图片进行减操作')
msg_box.exec_()
if len(self.unit3_result1.shape) == 3:
self.unit3_result1_channel = 3
else:
self.unit3_result1_channel = 1
elif self.unit3_img1.size <= 1 or self.unit3_img2.size <= 1:
msg_box = QMessageBox(QMessageBox.Warning, '缺失图片', '请选择两张图片后再相减')
msg_box.exec_()
elif self.unit3_img1_channel != self.unit3_img2_channel:
msg_box = QMessageBox(QMessageBox.Warning, '通道不同', '彩色图与灰度图不能相减')
msg_box.exec_()
elif self.unit3_img1.shape != self.unit3_img2.shape:
msg_box = QMessageBox(QMessageBox.Warning, '图片尺寸不同', '尺寸不同的图像不能相减')
msg_box.exec_()
unit3_img_refresh(self)
def MULTI(self):
if self.unit3_img1.size > 1 and self.unit3_img2.size > 1 \
and self.unit3_img1_channel == self.unit3_img2_channel \
and self.unit3_img1.shape == self.unit3_img2.shape:
try:
self.unit3_result1 = cv2.multiply(src1=self.unit3_img1, src2=self.unit3_img2)
except:
msg_box = QMessageBox(QMessageBox.Warning, '图片异常', '请重新选择图片进行乘操作')
msg_box.exec_()
if len(self.unit3_result1.shape) == 3:
self.unit3_result1_channel = 3
else:
self.unit3_result1_channel = 1
elif self.unit3_img1.size <= 1 or self.unit3_img2.size <= 1:
msg_box = QMessageBox(QMessageBox.Warning, '缺失图片', '请选择两张图片后再相乘')
msg_box.exec_()
elif self.unit3_img1_channel != self.unit3_img2_channel:
msg_box = QMessageBox(QMessageBox.Warning, '通道不同', '彩色图与灰度图不能相乘')
msg_box.exec_()
elif self.unit3_img1.shape != self.unit3_img2.shape:
msg_box = QMessageBox(QMessageBox.Warning, '图片尺寸不同', '尺寸不同的图像不能相乘')
msg_box.exec_()
unit3_img_refresh(self)
def DIVIDE(self):
if self.unit3_img1.size > 1 and self.unit3_img2.size > 1 \
and self.unit3_img1_channel == self.unit3_img2_channel \
and self.unit3_img1.shape == self.unit3_img2.shape:
try:
self.unit3_result1 = cv2.divide(src1=self.unit3_img1, src2=self.unit3_img2)
except:
msg_box = QMessageBox(QMessageBox.Warning, '图片异常', '图片中有灰度值为0的像素点')
msg_box.exec_()
if len(self.unit3_result1.shape) == 3:
self.unit3_result1_channel = 3
else:
self.unit3_result1_channel = 1
elif self.unit3_img1.size <= 1 or self.unit3_img2.size <= 1:
msg_box = QMessageBox(QMessageBox.Warning, '缺失图片', '请选择两张图片后再相除')
msg_box.exec_()
elif self.unit3_img1_channel != self.unit3_img2_channel:
msg_box = QMessageBox(QMessageBox.Warning, '通道不同', '彩色图与灰度图不能相除')
msg_box.exec_()
elif self.unit3_img1.shape != self.unit3_img2.shape:
msg_box = QMessageBox(QMessageBox.Warning, '图片尺寸不同', '尺寸不同的图像不能相除')
msg_box.exec_()
unit3_img_refresh(self)
def AND(self):
if self.unit3_img1.size > 1 and self.unit3_img2.size > 1 \
and self.unit3_img1_channel == self.unit3_img2_channel \
and self.unit3_img1.shape == self.unit3_img2.shape:
try:
self.unit3_result1 = self.unit3_img1&self.unit3_img2
except:
msg_box = QMessageBox(QMessageBox.Warning, '图片异常', '请重新选择图片进行与操作')
msg_box.exec_()
if len(self.unit3_result1.shape) == 3:
self.unit3_result1_channel = 3
else:
self.unit3_result1_channel = 1
elif self.unit3_img1.size <= 1 or self.unit3_img2.size <= 1:
msg_box = QMessageBox(QMessageBox.Warning, '缺失图片', '请选择两张图片再进行与操作')
msg_box.exec_()
elif self.unit3_img1_channel != self.unit3_img2_channel:
msg_box = QMessageBox(QMessageBox.Warning, '通道不同', '彩色图与灰度图不能进行与操作')
msg_box.exec_()
elif self.unit3_img1.shape != self.unit3_img2.shape:
msg_box = QMessageBox(QMessageBox.Warning, '图片尺寸不同', '尺寸不同的图像不能进行与操作')
msg_box.exec_()
unit3_img_refresh(self)
def OR(self):
if self.unit3_img1.size > 1 and self.unit3_img2.size > 1 \
and self.unit3_img1_channel == self.unit3_img2_channel \
and self.unit3_img1.shape == self.unit3_img2.shape:
try:
self.unit3_result1 = self.unit3_img1 | self.unit3_img2
except:
msg_box = QMessageBox(QMessageBox.Warning, '图片异常', '请重新选择图片进行或操作')
msg_box.exec_()
if len(self.unit3_result1.shape) == 3:
self.unit3_result1_channel = 3
else:
self.unit3_result1_channel = 1
elif self.unit3_img1.size <= 1 or self.unit3_img2.size <= 1:
msg_box = QMessageBox(QMessageBox.Warning, '缺失图片', '请选择两张图片后再进行或操作')
msg_box.exec_()
elif self.unit3_img1_channel != self.unit3_img2_channel:
msg_box = QMessageBox(QMessageBox.Warning, '通道不同', '彩色图与灰度图不能进行或操作')
msg_box.exec_()
elif self.unit3_img1.shape != self.unit3_img2.shape:
msg_box = QMessageBox(QMessageBox.Warning, '图片尺寸不同', '尺寸不同的图像不能进行或操作')
msg_box.exec_()
unit3_img_refresh(self)
def NOT(self):
if self.unit3_img1.size>1:
try:
self.unit3_result1 = cv2.bitwise_not(self.unit3_img1)
if len(self.unit3_result1.shape) == 3:
self.unit3_result1_channel = 3
else:
self.unit3_result1_channel = 1
except:
msg_box = QMessageBox(QMessageBox.Warning, '图片异常', '请重新选择图片进行或操作')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '缺失图片', '请选择两张图片后再进行非操作')
msg_box.exec_()
unit3_img_refresh(self)
def img_left_clear(self):
if self.unit3_img1.size > 1 or self.unit3_img2.size > 1:
self.unit3_img1 = np.ndarray(())
self.unit3_img2 = np.ndarray(())
self.unit3_result1 = np.ndarray(())
self.unit3_img1_channel = 1
self.unit3_img2_channel = 1
self.unit3_result1_channel = 1
for label in [self.ui.label_35, self.ui.label_36, self.ui.label_29]:
label.setPixmap(QtGui.QPixmap(''))
else:
msg_box = QMessageBox(QMessageBox.Warning, '无需清空', '没有图片')
msg_box.exec_()
unit3_img_refresh(self)
def img_left_save(self):
if self.unit3_result1.size > 1:
fileName, tmp = QFileDialog.getSaveFileName(self, '保存图像', 'Image', '*.png *.jpg *.bmp *.jpeg')
if fileName == '':
return
cv2.imwrite(fileName, self.unit3_result1)
msg_box = QMessageBox(QMessageBox.Information, '成功', '图像保存成功,保存路径为:' + fileName)
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请生成图像')
msg_box.exec_()
def img_left_show(self):
if self.unit3_result1.size > 1:
cv2.imshow('Original pic', self.unit3_result1)
cv2.waitKey(0)
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '没有生成图像')
msg_box.exec_()
def img_right_load(self):
fileName, tmp = QFileDialog.getOpenFileName(self, '打开图像', 'Image', '*.png *.jpg *.bmp *.jpeg')
if fileName == '':
return
self.unit3_img3 = cv2.imread(fileName, cv2.IMREAD_GRAYSCALE)
if self.unit3_img3.size <= 1:
return
print(self.unit3_img3.shape)
unit3_img_refresh(self)
def erode(self):
checked = self.ui.radioButton_2.isChecked()
try:
x = self.ui.lineEdit_20.text()
y = self.ui.lineEdit_27.text()
except:
msg_box = QMessageBox(QMessageBox.Warning, '结构元不能为空', '请重新输入')
msg_box.exec_()
return
if self.unit3_img3.size>1:
if x and y:
x = int(x)
y = int(y)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (x, y), (-1, -1))
if checked:
if self.unit3_result2.size>1:
self.unit3_result2 = cv2.erode(self.unit3_result2, kernel)
else:
self.unit3_result2 = cv2.erode(self.unit3_img3, kernel)
else:
self.unit3_result2 = cv2.erode(self.unit3_img3, kernel)
if len(self.unit3_result2.shape) == 3:
self.unit3_result2.channel = 3
else:
self.unit3_result2.channel = 1
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '结构元为空', '请输入结构元大小')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请选择图像')
msg_box.exec_()
def dilate(self):
checked = self.ui.radioButton_2.isChecked()
try:
x = self.ui.lineEdit_20.text()
y = self.ui.lineEdit_27.text()
except:
msg_box = QMessageBox(QMessageBox.Warning, '结构元不能为空', '请重新输入')
msg_box.exec_()
return
if self.unit3_img3.size > 1:
if x and y:
x = int(x)
y = int(y)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (x, y), (-1, -1))
if checked:
if self.unit3_result2.size > 1:
self.unit3_result2 = cv2.dilate(self.unit3_result2, kernel)
else:
self.unit3_result2 = cv2.dilate(self.unit3_img3, kernel)
else:
self.unit3_result2 = cv2.dilate(self.unit3_img3, kernel)
if len(self.unit3_result2.shape) == 3:
self.unit3_result2.channel = 3
else:
self.unit3_result2.channel = 1
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '结构元为空', '请输入结构元大小')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请选择图像')
msg_box.exec_()
def opening(self):
checked = self.ui.radioButton_2.isChecked()
try:
x = self.ui.lineEdit_20.text()
y = self.ui.lineEdit_27.text()
except:
msg_box = QMessageBox(QMessageBox.Warning, '结构元不能为空', '请重新输入')
msg_box.exec_()
return
if self.unit3_img3.size > 1:
if x and y:
x = int(x)
y = int(y)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (x, y), (-1, -1))
if checked:
if self.unit3_result2.size > 1:
self.unit3_result2 = cv2.morphologyEx(self.unit3_result2, cv2.MORPH_OPEN, kernel)
else:
self.unit3_result2 = cv2.morphologyEx(self.unit3_img3,cv2.MORPH_OPEN, kernel)
else:
self.unit3_result2 = cv2.morphologyEx(self.unit3_img3, cv2.MORPH_OPEN, kernel)
if len(self.unit3_result2.shape) == 3:
self.unit3_result2.channel = 3
else:
self.unit3_result2.channel = 1
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '结构元为空', '请输入结构元大小')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请选择图像')
msg_box.exec_()
def closing(self):
checked = self.ui.radioButton_2.isChecked()
try:
x = self.ui.lineEdit_20.text()
y = self.ui.lineEdit_27.text()
except:
msg_box = QMessageBox(QMessageBox.Warning, '结构元不能为空', '请重新输入')
msg_box.exec_()
return
if self.unit3_img3.size > 1:
if x and y:
x = int(x)
y = int(y)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (x, y), (-1, -1))
if checked:
if self.unit3_result2.size > 1:
self.unit3_result2 = cv2.morphologyEx(self.unit3_result2, cv2.MORPH_CLOSE, kernel)
else:
self.unit3_result2 = cv2.morphologyEx(self.unit3_img3, cv2.MORPH_CLOSE, kernel)
else:
self.unit3_result2 = cv2.morphologyEx(self.unit3_img3, cv2.MORPH_CLOSE, kernel)
if len(self.unit3_result2.shape) == 3:
self.unit3_result2.channel = 3
else:
self.unit3_result2.channel = 1
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '结构元为空', '请输入结构元大小')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请选择图像')
msg_box.exec_()
def mean(self):
checked = self.ui.radioButton_2.isChecked()
try:
x = self.ui.lineEdit_20.text()
y = self.ui.lineEdit_27.text()
except:
msg_box = QMessageBox(QMessageBox.Warning, '结构元不能为空', '请重新输入')
msg_box.exec_()
return
if self.unit3_img3.size > 1:
if x and y:
x = int(x)
y = int(y)
if x<=0 or y<=0 or x!=y or x%2!=1:
msg_box = QMessageBox(QMessageBox.Warning, '均值滤波长宽均为正奇数', '请重新输入')
msg_box.exec_()
return
if checked:
if self.unit3_result2.size > 1:
self.unit3_result2 = cv2.blur(self.unit3_result2, (x,y),(-1,-1))
else:
self.unit3_result2 = cv2.blur(self.unit3_img3, (x,y),(-1,-1))
else:
self.unit3_result2 = cv2.blur(self.unit3_img3, (x,y),(-1,-1))
if len(self.unit3_result2.shape) == 3:
self.unit3_result2.channel = 3
else:
self.unit3_result2.channel = 1
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '结构元为空', '请输入结构元大小')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请选择图像')
msg_box.exec_()
def guassian(self):
checked = self.ui.radioButton_2.isChecked()
try:
x = self.ui.lineEdit_20.text()
y = self.ui.lineEdit_27.text()
except:
msg_box = QMessageBox(QMessageBox.Warning, '结构元不能为空', '请重新输入')
msg_box.exec_()
return
if self.unit3_img3.size > 1:
if x and y:
x = int(x)
y = int(y)
if x<=0 or y<=0 or x!=y or x%2!=1:
msg_box = QMessageBox(QMessageBox.Warning, '高斯滤波长宽均为正奇数', '请重新输入')
msg_box.exec_()
return
if checked:
if self.unit3_result2.size > 1:
self.unit3_result2 = cv2.GaussianBlur(self.unit3_result2, (x, y), 0,0)
else:
self.unit3_result2 = cv2.GaussianBlur(self.unit3_img3, (x, y), 0,0)
else:
self.unit3_result2 = cv2.GaussianBlur(self.unit3_img3, (x, y), 0,0)
if len(self.unit3_result2.shape) == 3:
self.unit3_result2.channel = 3
else:
self.unit3_result2.channel = 1
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '结构元为空', '请输入结构元大小')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请选择图像')
msg_box.exec_()
def Covfilter(self):
checked = self.ui.radioButton_2.isChecked()
try:
x = self.ui.lineEdit_20.text()
y = self.ui.lineEdit_27.text()
except:
msg_box = QMessageBox(QMessageBox.Warning, '结构元不能为空', '请重新输入')
msg_box.exec_()
return
if self.unit3_img3.size > 1:
if x and y:
x = int(x)
y = int(y)
if x <= 0 or y <= 0 or x % 2 != 1:
msg_box = QMessageBox(QMessageBox.Warning, '卷积核长宽均为正奇数', '请重新输入')
msg_box.exec_()
return
kernel = np.ones((x, y), np.float32) / (x*y)
if checked:
if self.unit3_result2.size > 1:
self.unit3_result2 = cv2.filter2D(self.unit3_result2, -1, kernel)
else:
self.unit3_result2 = cv2.filter2D(self.unit3_img3, -1, kernel)
else:
self.unit3_result2 = cv2.filter2D(self.unit3_img3, -1, kernel)
if len(self.unit3_result2.shape) == 3:
self.unit3_result2.channel = 3
else:
self.unit3_result2.channel = 1
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '结构元为空', '请输入结构元大小')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请选择图像')
msg_box.exec_()
def median(self):
checked = self.ui.radioButton_2.isChecked()
try:
x = self.ui.lineEdit_20.text()
y = self.ui.lineEdit_27.text()
except:
msg_box = QMessageBox(QMessageBox.Warning, '结构元不能为空', '请重新输入')
msg_box.exec_()
return
if self.unit3_img3.size > 1:
if x and y:
x = int(x)
y = int(y)
if x<=0 or y<=0 or x!=y or x%2!=1:
msg_box = QMessageBox(QMessageBox.Warning, '中值滤波算子长宽均为正奇数且相等', '请重新输入')
msg_box.exec_()
return
print(x,y)
if checked:
if self.unit3_result2.size > 1:
self.unit3_result2 = cv2.medianBlur(self.unit3_result2, x)
else:
self.unit3_result2 = cv2.medianBlur(self.unit3_img3, x)
else:
self.unit3_result2 = cv2.medianBlur(self.unit3_img3, x)
if len(self.unit3_result2.shape) == 3:
self.unit3_result2.channel = 3
else:
self.unit3_result2.channel = 1
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '结构元为空', '请输入结构元大小')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请选择图像')
msg_box.exec_()
def img_right_clear(self):
if self.unit3_img3.size > 1 or self.unit3_result2.size > 1:
self.unit3_img3 = np.ndarray(())
self.unit3_result2 = np.ndarray(())
self.unit3_img3_channel = 1
self.unit3_result2_channel = 1
for label in [self.ui.label_33, self.ui.label_31]:
label.setPixmap(QtGui.QPixmap(''))
else:
msg_box = QMessageBox(QMessageBox.Warning, '无需清空', '没有图片')
msg_box.exec_()
unit3_img_refresh(self)
def bilateralFilter(self):
checked = self.ui.radioButton_2.isChecked()
try:
d = self.ui.lineEdit_11.text()
sigmaspace = self.ui.lineEdit_12.text()
sigmacolor = self.ui.lineEdit_13.text()
except:
msg_box = QMessageBox(QMessageBox.Warning, '结构元不能为空', '请重新输入')
msg_box.exec_()
return
if self.unit3_img3.size > 1:
if d and sigmaspace and sigmacolor:
d = int(d)
sigmaspace = int(sigmaspace)
sigmacolor = int(sigmacolor)
if d <= 0 or sigmacolor <= 0 or sigmaspace <= 0:
msg_box = QMessageBox(QMessageBox.Warning, '中值滤波算子长宽均为正奇数且相等', '请重新输入')
msg_box.exec_()
return
if checked:
if self.unit3_result2.size > 1:
self.unit3_result2 = cv2.bilateralFilter(self.unit3_result2, d, sigmacolor, sigmaspace)
else:
self.unit3_result2 = cv2.bilateralFilter(self.unit3_img3, d, sigmacolor, sigmaspace)
else:
self.unit3_result2 = cv2.bilateralFilter(self.unit3_img3, d, sigmacolor, sigmaspace)
if len(self.unit3_result2.shape) == 3:
self.unit3_result2.channel = 3
else:
self.unit3_result2.channel = 1
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '结构元或方差为空', '请输入结构元大小和方差')
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '提示', '请选择图像')
msg_box.exec_()
def add_noise_Guass(self): # 添加高斯噪声
if self.unit3_img3.size>1:
mu = 0.0
sigma = 0.1
self.unit3_result2 = np.array(self.unit3_img3 / 255, dtype=float)
noise = np.random.normal(mu, sigma, self.unit3_result2.shape)
self.unit3_result2 = self.unit3_result2 + noise
if self.unit3_result2.min() < 0:
low_clip = -1.
else:
low_clip = 0.
self.unit3_result2 = np.clip(self.unit3_result2, low_clip, 1.0)
self.unit3_result2 = np.uint8(self.unit3_result2 * 255)
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '提示', '请选择图像')
msg_box.exec_()
def add_noise_Jiaoyan(self):
if self.unit3_img3.size>1:
SNR = 0.9
print("Jiao Yan Ready")
self.unit3_result2 = self.unit3_img3.copy()
w, h = self.unit3_result2.shape[:2]
noisy_size = int(self.unit3_result2.size*(1-SNR))
print(noisy_size)
for k in range(0,noisy_size):
t = np.random.randint(0,1)
x = int(np.random.uniform(0, w))
y = int(np.random.uniform(0, h))
if t<0.5:
self.unit3_result2[x, y]=0
else :
self.unit3_result2[x, y]=256
print("Jiao Yan Over")
unit3_img_refresh(self)
else:
msg_box = QMessageBox(QMessageBox.Warning, '提示', '请选择图像')
msg_box.exec_()
def img_right_save(self):
if self.unit3_result2.size > 1:
fileName, tmp = QFileDialog.getSaveFileName(self, '保存图像', 'Image', '*.png *.jpg *.bmp *.jpeg')
if fileName == '':
return
cv2.imwrite(fileName, self.unit3_result2)
msg_box = QMessageBox(QMessageBox.Information, '成功', '图像保存成功,保存路径为:' + fileName)
msg_box.exec_()
else:
msg_box = QMessageBox(QMessageBox.Warning, '没有图像', '请生成图像')
msg_box.exec_()
def img_right_show(self):
if self.unit3_result2.size > 1:
cv2.imshow('Original pic', self.unit3_result2)
cv2.waitKey(0)
else:
msg_box = QMessageBox(QMessageBox.Warning, '提示', '没有生成图像')
msg_box.exec_()
def mousePressEvent(self, e):
globalpos = e.globalPos()
pos = self.ui.label_35.mapFromGlobal(globalpos)
pos2 = self.ui.label_36.mapFromGlobal(globalpos)
pos3 = self.ui.label_29.mapFromGlobal(globalpos)
pos4 = self.ui.label_33.mapFromGlobal(globalpos)
pos5 = self.ui.label_31.mapFromGlobal(globalpos)
if pos.y() < 250 and pos.y() > 0 and pos.x() > 0 and pos.x() < 200:
self.m_drag = True
self.m_DragPosition = pos
e.accept()
elif pos2.y() < 250 and pos2.y() > 0 and pos2.x() > 0 and pos2.x() < 200:
self.m_drag = True
self.m_DragPosition = pos2
e.accept()
elif pos3.y() < 250 and pos3.y() > 0 and pos3.x() > 0 and pos3.x() < 200:
self.m_drag = True
self.m_DragPosition = pos3
e.accept()
elif pos4.y() < 250 and pos4.y() > 0 and pos4.x() > 0 and pos4.x() < 200:
self.m_drag = True
self.m_DragPosition = pos4
e.accept()
elif pos5.y() < 250 and pos5.y() > 0 and pos5.x() > 0 and pos5.x() < 200:
self.m_drag = True
self.m_DragPosition = pos5
e.accept()
def mouseReleaseEvent(self, e):
globalpos = e.globalPos()
pos = self.ui.label_35.mapFromGlobal(globalpos)
pos2 = self.ui.label_36.mapFromGlobal(globalpos)
pos3 = self.ui.label_29.mapFromGlobal(globalpos)
pos4 = self.ui.label_33.mapFromGlobal(globalpos)
pos5 = self.ui.label_31.mapFromGlobal(globalpos)
if pos.y() < 250 and pos.y() > 0 and pos.x() > 0 and pos.x() < 200:
self.m_drag = True
e.accept()
elif pos2.y() < 250 and pos2.y() > 0 and pos2.x() > 0 and pos2.x() < 200:
self.m_drag = True
e.accept()
elif pos3.y() < 250 and pos3.y() > 0 and pos3.x() > 0 and pos3.x() < 200:
self.m_drag = True
e.accept()
elif pos4.y() < 250 and pos4.y() > 0 and pos4.x() > 0 and pos4.x() < 200:
self.m_drag = True
e.accept()
elif pos5.y() < 250 and pos5.y() > 0 and pos5.x() > 0 and pos5.x() < 200:
self.m_drag = True
e.accept()
def mouseMoveEvent(self, e):
e.accept()