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.

468 lines
18 KiB

import cv2
import numpy as np
import PyQt5.QtGui
from PyQt5.QtGui import QPixmap, QImage, qRgb
import Mainwindow
from PyQt5.QtWidgets import *
import sys
import picture_fun
class MainWindow(QWidget,Mainwindow.Ui_Mainwindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.stackedLayout = QStackedLayout(self.frame)
self.page1 = FramePage1()
self.page2 = FramePage2()
self.page3 = FramePage3()
self.page4 = FramePage4()
self.page5 = FramePage5()
self.page6 = FramePage6()
self.page7 = FramePage7()
self.stackedLayout.addWidget(self.page1) #添加控件
self.stackedLayout.addWidget(self.page2)
self.stackedLayout.addWidget(self.page3)
self.stackedLayout.addWidget(self.page4)
self.stackedLayout.addWidget(self.page5)
self.stackedLayout.addWidget(self.page6)
self.stackedLayout.addWidget(self.page7)
self.controller()
def controller(self):
self.pushButton_1.clicked.connect(self.switch1)
self.pushButton_2.clicked.connect(self.switch2)
self.pushButton_3.clicked.connect(self.switch3)
self.pushButton_4.clicked.connect(self.switch4)
self.pushButton_5.clicked.connect(self.switch5)
self.pushButton_6.clicked.connect(self.switch6)
self.pushButton_7.clicked.connect(self.switch7)
def switch1(self):
self.stackedLayout.setCurrentIndex(0) # 索引按加入布局的顺序
def switch2(self):
self.stackedLayout.setCurrentIndex(1)
def switch3(self):
self.stackedLayout.setCurrentIndex(2)
def switch4(self):
self.stackedLayout.setCurrentIndex(3)
def switch5(self):
self.stackedLayout.setCurrentIndex(4)
def switch6(self):
self.stackedLayout.setCurrentIndex(5)
def switch7(self):
self.stackedLayout.setCurrentIndex(6)
class FramePage1(QWidget, Mainwindow.Ui_Formwin1):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_load.clicked.connect(self.openimage)
self.pushButton_save.clicked.connect(self.saveimage)
self.pushButton_turntoGray.clicked.connect(self.fun1)
self.pushButton_turntotwo.clicked.connect(self.fun2)
def openimage(self):
fname = QFileDialog.getOpenFileName(self, '打开图片', './', "Images (*.png *.jpg *.bmp)")
if fname[0]:
self.label_daichuli.setPixmap(QPixmap(fname[0]))
self.label_daichuli.setWordWrap(True)
self.label_daichuli.setScaledContents(True)
def saveimage(self):
nfname = QFileDialog.getSaveFileName(self, "保存图片", "./", "Images (*.png *.jpg *.bmp)")
if nfname[0]:
self.label_jieguo.pixmap().save(nfname[0])
def fun1(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.gray_picture(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def fun2(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.erzhihua(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
class FramePage2(QWidget, Mainwindow.Ui_Formwin2):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_load.clicked.connect(self.openimage)
self.pushButton_save.clicked.connect(self.saveimage)
self.pushButton_fun0.clicked.connect(self.fun1)
self.pushButton_fun1.clicked.connect(self.fun2)
self.pushButton_fun2.clicked.connect(self.fun3)
self.pushButton_fun3.clicked.connect(self.fun4)
def openimage(self):
fname = QFileDialog.getOpenFileName(self, '打开图片', './', "Images (*.png *.jpg *.bmp *.jpeg)")
if fname[0]:
self.label_daichuli.setPixmap(QPixmap(fname[0]))
self.label_daichuli.setWordWrap(True)
self.label_daichuli.setScaledContents(True)
def saveimage(self):
nfname = QFileDialog.getSaveFileName(self, "保存图片", "./", "Images (*.png *.jpg *.bmp)")
if nfname[0]:
self.label_jieguo.pixmap().save(nfname[0])
def fun1(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.flipfun(src,0)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def fun2(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.flipfun(src,1)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def fun3(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.flipfun(src,-1)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def fun4(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
x = self.lineEdit_power_value.text()
x = float(x)
newsrc = picture_fun.fangsuo(src, x)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
class FramePage3(QWidget, Mainwindow.Ui_Formwin3):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_load.clicked.connect(self.openimage)
self.pushButton_save.clicked.connect(self.saveimage)
self.pushButton_lap.clicked.connect(self.lap_fun)
self.pushButton_zhifangtu.clicked.connect(self.equalhist_fun)
self.pushButton_gama.clicked.connect(self.gama_fun)
def openimage(self):
fname = QFileDialog.getOpenFileName(self, '打开图片', './', "Images (*.png *.jpg *.bmp)")
if fname[0]:
self.label_daichuli.setPixmap(QPixmap(fname[0]))
self.label_daichuli.setWordWrap(True)
self.label_daichuli.setScaledContents(True)
def saveimage(self):
nfname = QFileDialog.getSaveFileName(self, "保存图片", "./", "Images (*.png *.jpg *.bmp)")
if nfname[0]:
self.label_jieguo.pixmap().save(nfname[0])
def lap_fun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.lap_9(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def equalhist_fun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.cal_equalhist(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def gama_fun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
power = self.lineEdit_power_value.text()
power = float(power)
newsrc = picture_fun.gama_transfer(src, power)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
class FramePage4(QWidget, Mainwindow.Ui_Formwin4):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_load.clicked.connect(self.openimage)
self.pushButton_save.clicked.connect(self.saveimage)
self.pushButton_salt.clicked.connect(self.add_noisy_fun) #椒盐彩色
self.pushButton_gauss.clicked.connect(self.add_noise_fun) #彩色图像添加高斯噪声
def openimage(self):
fname = QFileDialog.getOpenFileName(self, '打开图片', './', "Images (*.png *.jpg *.bmp)")
if fname[0]:
self.label_daichuli.setPixmap(QPixmap(fname[0]))
self.label_daichuli.setWordWrap(True)
self.label_daichuli.setScaledContents(True)
def saveimage(self):
nfname = QFileDialog.getSaveFileName(self, "保存图片", "./", "Images (*.png *.jpg *.bmp)")
if nfname[0]:
self.label_jieguo.pixmap().save(nfname[0])
def add_noisy_fun(self): #椒盐彩色
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
num = self.lineEdit_n_value.text()
num= float(num)
newsrc = picture_fun.add_noisy(src, num)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def add_noise_fun(self): #彩色图像添加高斯噪声
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
mean = self.lineEdit_mean_value.text()
mean = int(mean)
val=self.lineEdit_val_value.text()
val=float(val)
newsrc = picture_fun.add_noise(src,mean,val)
pix = matqimage_guass(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
class FramePage5(QWidget, Mainwindow.Ui_Formwin5):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_load.clicked.connect(self.openimage)
self.pushButton_save.clicked.connect(self.saveimage)
self.pushButton_fangbo.clicked.connect(self.boxFilter_fun)
self.pushButton_zhongzhi.clicked.connect(self.medianBlur_fun)
self.pushButton_suangbian.clicked.connect(self.bilateralFilter_fun)
self.pushButton_gauss.clicked.connect(self.GaussianBlur_fun)
self.pushButton_junzhi.clicked.connect(self.blur_fun)
def openimage(self):
fname = QFileDialog.getOpenFileName(self, '打开图片', './', "Images (*.png *.jpg *.bmp)")
if fname[0]:
self.label_daichuli.setPixmap(QPixmap(fname[0]))
self.label_daichuli.setWordWrap(True)
self.label_daichuli.setScaledContents(True)
def saveimage(self):
nfname = QFileDialog.getSaveFileName(self, "保存图片", "./", "Images (*.png *.jpg *.bmp)")
if nfname[0]:
self.label_jieguo.pixmap().save(nfname[0])
def boxFilter_fun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.boxFilterfun(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def medianBlur_fun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.medianBlurfun(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def bilateralFilter_fun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.bilateralFilterfun(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def GaussianBlur_fun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.GaussianBlurfun(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def blur_fun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.blurfun(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
class FramePage6(QWidget, Mainwindow.Ui_Formwin6):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_load.clicked.connect(self.openimage)
self.pushButton_save.clicked.connect(self.saveimage)
self.pushButton_sift.clicked.connect(self.siftfun)
self.pushButton_lunkuo.clicked.connect(self.lunkuofun)
def openimage(self):
fname = QFileDialog.getOpenFileName(self, '打开图片', './', "Images (*.png *.jpg *.bmp)")
if fname[0]:
self.label_daichuli.setPixmap(QPixmap(fname[0]))
self.label_daichuli.setWordWrap(True)
self.label_daichuli.setScaledContents(True)
def saveimage(self):
nfname = QFileDialog.getSaveFileName(self, "保存图片", "./", "Images (*.png *.jpg *.bmp)")
if nfname[0]:
self.label_jieguo.pixmap().save(nfname[0])
def siftfun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.sift_fun(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
def lunkuofun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.morphologyExfun(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
class FramePage7(QWidget, Mainwindow.Ui_Formwin7):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_load.clicked.connect(self.openimage)
self.pushButton_save.clicked.connect(self.saveimage)
self.pushButton_xiufu.clicked.connect(self.xiufu_fun)
def openimage(self):
fname = QFileDialog.getOpenFileName(self, '打开图片', './', "Images (*.png *.jpg *.bmp)")
if fname[0]:
self.label_daichuli.setPixmap(QPixmap(fname[0]))
self.label_daichuli.setWordWrap(True)
self.label_daichuli.setScaledContents(True)
def saveimage(self):
nfname = QFileDialog.getSaveFileName(self, "保存图片", "./", "Images (*.png *.jpg *.bmp)")
if nfname[0]:
self.label_jieguo.pixmap().save(nfname[0])
def xiufu_fun(self):
qimg = self.label_daichuli.pixmap()
src = qimage2mat(qimg)
newsrc = picture_fun.xiufu(src)
pix = matqimage(newsrc)
self.label_jieguo.setPixmap(pix)
self.label_jieguo.setWordWrap(True)
self.label_jieguo.setScaledContents(True)
#############################################################################################################
def qimage2mat(qtpixmap): #qtpixmap转opencv
qimg = qtpixmap.toImage()
temp_shape = (qimg.height(), qimg.bytesPerLine() * 8 // qimg.depth())
temp_shape += (4,)
ptr = qimg.bits()
ptr.setsize(qimg.byteCount())
result = np.array(ptr, dtype=np.uint8).reshape(temp_shape)
result = result[..., :3]
return result
def matqimage(cvimg): #opencv转QImage
if cvimg.ndim==2: #单通道
height, width= cvimg.shape
cvimg = cv2.cvtColor(cvimg, cv2.COLOR_BGR2RGB)
cvimg = QImage(cvimg.data, width, height, QImage.Format_RGB888)
pix = QPixmap.fromImage(cvimg)
return pix
else: #多个通道
width = cvimg.shape[1]
height = cvimg.shape[0]
pixmap = QPixmap(width, height) # 根据已知的高度和宽度新建一个空的QPixmap,
qimg = pixmap.toImage() # 将pximap转换为QImage类型的qimg
for row in range(0, height):
for col in range(0, width):
b = cvimg[row, col, 0]
g = cvimg[row, col, 1]
r = cvimg[row, col, 2]
pix = qRgb(r, g, b)
qimg.setPixel(col, row, pix)
pix = QPixmap.fromImage(qimg)
return pix
def matqimage_guass(cvimg): #opencv转QImage #guass 专用####
if cvimg.ndim==2: #单通道
height, width= cvimg.shape
cvimg = cv2.cvtColor(cvimg, cv2.COLOR_BGR2RGB)
cvimg = QImage(cvimg.data, width, height, QImage.Format_RGB888)
pix = QPixmap.fromImage(cvimg)
return pix
else: #多个通道
width = cvimg.shape[1] # 获取图片宽度
height = cvimg.shape[0] # 获取图片高度
pixmap = QPixmap(width, height) # 根据已知的高度和宽度新建一个空的QPixmap,
qimg = pixmap.toImage() # 将pximap转换为QImage类型的qimg
for row in range(0, height):
for col in range(0, width):
b = int(cvimg[row, col, 0]*255) #高斯加噪归一化了 要*255
g = int(cvimg[row, col, 1]*255)
r = int(cvimg[row, col, 2]*255)
pix = qRgb(r, g, b)
qimg.setPixel(col, row, pix)
pix = QPixmap.fromImage(qimg)
return pix # 转换完成,返回
if __name__ == '__main__':
app = QApplication(sys.argv)
ui = MainWindow()
ui.show()
sys.exit(app.exec_())