from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QGridLayout, QLineEdit, QSizePolicy, \ QHBoxLayout, QVBoxLayout, QLabel, QScrollArea, QSlider,QFileDialog,QFrame,QToolTip from PyQt5.QtGui import QColor, QPixmap, QIcon, QPalette, QFont, QImage from PyQt5.QtCore import QSize, QRect,QTimer,pyqtSlot import numpy import cv2 from PIL import Image, ImageDraw, ImageFont from detect_ecnu import Detector import operation,smooth,noise,sharp class MainWindow(QMainWindow): def __init__(self): super().__init__() #定义定时器 self.isCamUsed = False self.timer=QTimer() self.timer.timeout.connect(self.use_cam) #定义一些变量 self.openPath='' self.current='' self.isDetecting=False self.objects=[] self.hasOrigin=False #是否有图片 #记录图片是否已经保存,用于自动保存 self.saved=True self.initUI() #初始化神经网络 self.detector=Detector() self.imgLabel.setText("选择一张图片以开始") self.move_img_label() def initUI(self): # filledPolicy=QSizePolicy(QSizePolicy.Ignored,QSizePolicy.Expanding) self.titleFont = QFont('Microsoft YaHei', 10) self.titleFont.setBold(True) self.itemFont = QFont('Microsoft YaHei', 10) # 主组件 self.centerWidget = QWidget() self.mainVBox = QVBoxLayout() self.funWidget = QWidget() self.funWidget.setAutoFillBackground(True) self.palette = QPalette() self.palette.setColor(QPalette.Background, QColor(225, 225, 225)) self.funWidget.setPalette(self.palette) self.imgWidget = QWidget() self.imgWidget.setMinimumSize(150,150) self.propsArea = QScrollArea() self.propsArea.setFrameShape(QFrame.NoFrame) # 工具栏按钮 self.btn_open = QPushButton() self.btn_save = QPushButton() self.btn_camera = QPushButton() self.btn_shot = QPushButton() self.btn_detect=QPushButton() self.btn_flower = QPushButton() self.btn_cache = QPushButton() self.btn_open.setIcon(QIcon('imgs/open.png')) self.btn_open.setIconSize(QSize(40, 40)) self.btn_open.setFixedSize(80, 50) self.btn_open.setToolTip('打开图片') self.btn_save.setIcon(QIcon('imgs/save.png')) self.btn_save.setIconSize(QSize(30, 30)) self.btn_save.setFixedSize(80, 50) self.btn_save.setToolTip('保存图片') self.btn_camera.setIcon(QIcon('imgs/camera.png')) self.btn_camera.setIconSize(QSize(30, 30)) self.btn_camera.setFixedSize(80, 50) self.btn_camera.setToolTip('开启摄像头') self.btn_shot.setIcon(QIcon('imgs/shot.png')) self.btn_shot.setIconSize(QSize(30, 30)) self.btn_shot.setFixedSize(80, 50) self.btn_shot.setToolTip('拍摄照片') self.btn_shot.setEnabled(False) self.btn_detect.setIcon(QIcon('imgs/detect.png')) self.btn_detect.setIconSize(QSize(30,30)) self.btn_detect.setFixedSize(80,50) self.btn_detect.setToolTip('开启口罩识别') self.btn_detect.setEnabled(False) self.btn_flower.setIcon(QIcon('imgs/flower.png')) self.btn_flower.setIconSize(QSize(30, 30)) self.btn_flower.setFixedSize(80, 50) self.btn_flower.setToolTip('口罩印花') self.btn_cache.setIcon(QIcon('imgs/cache.png')) self.btn_cache.setIconSize(QSize(30, 30)) self.btn_cache.setFixedSize(80, 50) self.btn_cache.setToolTip('保留更改') self.btn_cache.setEnabled(False) self.fun_layout = QHBoxLayout() self.fun_layout.addWidget(self.btn_open) self.fun_layout.addWidget(self.btn_save) self.fun_layout.addWidget(self.btn_camera) self.fun_layout.addWidget(self.btn_shot) self.fun_layout.addWidget(self.btn_detect) self.fun_layout.addWidget(self.btn_flower) self.fun_layout.addWidget(self.btn_cache) self.fun_layout.addStretch(1) self.funWidget.setLayout(self.fun_layout) #工具栏按钮事件 self.btn_camera.clicked.connect(self.setTimer) self.btn_open.clicked.connect(self.openFile) self.btn_save.clicked.connect(self.save_Img) self.btn_detect.clicked.connect(self.set_detecting) self.btn_shot.clicked.connect(self.shot_Img) self.btn_flower.clicked.connect(self.add_flower) self.btn_cache.clicked.connect(self.cache) # 属性栏 self.propsArea.setFixedWidth(260) self.propsWidget = QWidget() self.layout_props = QVBoxLayout() self.lable_basic = QLabel("基本操作") self.lable_transform = QLabel("图像变换") self.lable_advanced = QLabel("进阶处理") self.lable_basic.setFont(self.titleFont) self.lable_transform.setFont(self.titleFont) self.lable_advanced.setFont(self.titleFont) # 属性栏操作 self.label_brightness = QLabel("亮度(0)") self.label_brightness.setFont(self.itemFont) self.slider_brightness = QSlider(1) self.slider_brightness.setFixedWidth(200) self.slider_brightness.setMinimum(-100) self.slider_brightness.setMaximum(100) self.slider_brightness.setSingleStep(1) self.slider_brightness.setValue(0) self.slider_brightness.valueChanged.connect(self.change_brightness) self.label_move_horizon = QLabel("水平平移") self.label_move_horizon.setFont(self.itemFont) self.edit_move_horizon = QLineEdit() self.edit_move_horizon.setText('0') self.edit_move_horizon.setFixedWidth(200) self.edit_move_horizon.returnPressed.connect(self.move_horizen) self.label_move_vertical = QLabel("垂直平移") self.label_move_vertical.setFont(self.itemFont) self.edit_move_vertical = QLineEdit() self.edit_move_vertical.setText('0') self.edit_move_vertical.setFixedWidth(200) self.edit_move_vertical.returnPressed.connect(self.move_vertical) self.label_rotation = QLabel("顺时针旋转(0°)") self.label_rotation.setFont(self.itemFont) self.slider_rotation = QSlider(1) self.slider_rotation.setFixedWidth(200) self.slider_rotation.setMinimum(0) self.slider_rotation.setMaximum(360) self.slider_rotation.setSingleStep(2) self.slider_rotation.setValue(0) self.slider_rotation.valueChanged.connect(self.rotate) self.label_flip = QLabel("翻转") self.label_flip.setFont(self.itemFont) self.btn_flip_horizon = QPushButton("水平翻转") self.btn_flip_horizon.setFixedWidth(200) self.btn_flip_horizon.setFont(self.itemFont) self.btn_flip_horizon.clicked.connect(self.flipH) self.btn_flip_vertical = QPushButton("垂直翻转") self.btn_flip_vertical.setFixedWidth(200) self.btn_flip_vertical.setFont(self.itemFont) self.btn_flip_vertical.clicked.connect(self.flipV) self.label_zoom = QLabel("缩放(1)") self.label_zoom.setFont(self.itemFont) self.slider_zoom = QSlider(1) self.slider_zoom.setFixedWidth(200) self.slider_zoom.setMinimum(2) self.slider_zoom.setMaximum(50) self.slider_zoom.setSingleStep(1) self.slider_zoom.setValue(10) self.slider_zoom.valueChanged.connect(self.scale) self.label_histogram = QLabel("灰度直方图") self.label_histogram.setFont(self.itemFont) self.btn_histogram = QPushButton("显示直方图") self.btn_histogram.setFixedWidth(200) self.btn_histogram.setFont(self.itemFont) self.btn_histogram.clicked.connect(self.hist) self.label_contrast = QLabel("对比度(50)") self.label_contrast.setFont(self.itemFont) self.slider_contrast = QSlider(1) self.slider_contrast.setFixedWidth(200) self.slider_contrast.setMinimum(0) self.slider_contrast.setMaximum(100) self.slider_contrast.setSingleStep(1) self.slider_contrast.setValue(50) self.slider_contrast.valueChanged.connect(self.contrast) self.label_smoothing = QLabel("图像平滑") self.label_smoothing.setFont(self.itemFont) self.btn_average_filter = QPushButton("均值滤波") self.btn_average_filter.setFixedWidth(200) self.btn_average_filter.setFont(self.itemFont) self.btn_average_filter.clicked.connect(self.average) self.btn_Gaussian_filter = QPushButton("高斯滤波") self.btn_Gaussian_filter.setFixedWidth(200) self.btn_Gaussian_filter.setFont(self.itemFont) self.btn_Gaussian_filter.clicked.connect(self.Gaussian) self.btn_median_filter = QPushButton("中值滤波") self.btn_median_filter.setFixedWidth(200) self.btn_median_filter.setFont(self.itemFont) self.btn_median_filter.clicked.connect(self.median) self.btn_bilater_filter = QPushButton("双边滤波") self.btn_bilater_filter.setFixedWidth(200) self.btn_bilater_filter.setFont(self.itemFont) self.btn_bilater_filter.clicked.connect(self.bilater) self.label_sharpening = QLabel("边缘检测") self.label_sharpening.setFont(self.itemFont) self.btn_Prewitt = QPushButton("Prewitt算子") self.btn_Prewitt.setFixedWidth(200) self.btn_Prewitt.setFont(self.itemFont) self.btn_Prewitt.clicked.connect(self.prewitt) self.btn_Sobel = QPushButton("Sobel算子") self.btn_Sobel.setFixedWidth(200) self.btn_Sobel.setFont(self.itemFont) self.btn_Sobel.clicked.connect(self.sobel) self.btn_Laplacian = QPushButton("Laplacian算子") self.btn_Laplacian.setFixedWidth(200) self.btn_Laplacian.setFont(self.itemFont) self.btn_Laplacian.clicked.connect(self.laplacian) self.btn_LoG = QPushButton("LoG算法") self.btn_LoG.setFixedWidth(200) self.btn_LoG.setFont(self.itemFont) self.btn_LoG.clicked.connect(self.log) self.btn_canny = QPushButton("Canny算子") self.btn_canny.setFixedWidth(200) self.btn_canny.setFont(self.itemFont) self.btn_canny.clicked.connect(self.canny) self.btn_reset = QPushButton("重置图像") self.btn_reset.setFixedWidth(200) self.btn_reset.setFont(self.titleFont) self.btn_reset.clicked.connect(self.return_to_default) self.label_noiseing = QLabel("图像噪声") self.label_noiseing.setFont(self.itemFont) self.btn_noiseing = QPushButton("椒盐噪声") self.btn_noiseing.setFixedWidth(200) self.btn_noiseing.setFont(self.itemFont) self.btn_noiseing.clicked.connect(self.noise) self.layout_props.addWidget(self.btn_reset) self.layout_props.addWidget(self.lable_basic) self.layout_props.addWidget(self.label_brightness) self.layout_props.addWidget(self.slider_brightness) self.layout_props.addWidget(self.lable_transform) self.layout_props.addWidget(self.label_move_horizon) self.layout_props.addWidget(self.edit_move_horizon) self.layout_props.addWidget(self.label_move_vertical) self.layout_props.addWidget(self.edit_move_vertical) self.layout_props.addWidget(self.label_rotation) self.layout_props.addWidget(self.slider_rotation) self.layout_props.addWidget(self.label_flip) self.layout_props.addWidget(self.btn_flip_horizon) self.layout_props.addWidget(self.btn_flip_vertical) self.layout_props.addWidget(self.label_zoom) self.layout_props.addWidget(self.slider_zoom) self.layout_props.addWidget(self.lable_advanced) self.layout_props.addWidget(self.label_histogram) self.layout_props.addWidget(self.btn_histogram) self.layout_props.addWidget(self.label_contrast) self.layout_props.addWidget(self.slider_contrast) self.layout_props.addWidget(self.label_smoothing) self.layout_props.addWidget(self.btn_average_filter) self.layout_props.addWidget(self.btn_Gaussian_filter) self.layout_props.addWidget(self.btn_median_filter) self.layout_props.addWidget(self.btn_bilater_filter) self.layout_props.addWidget(self.label_sharpening) self.layout_props.addWidget(self.btn_Prewitt) self.layout_props.addWidget(self.btn_Sobel) self.layout_props.addWidget(self.btn_Laplacian) self.layout_props.addWidget(self.btn_LoG) self.layout_props.addWidget(self.btn_canny) self.layout_props.addWidget(self.label_noiseing) self.layout_props.addWidget(self.btn_noiseing) self.propsWidget.setLayout(self.layout_props) self.propsArea.setWidget(self.propsWidget) # ===END属性栏 # 主屏幕 self.imgLabel = QLabel('正在加载神经网络...', self.imgWidget) # 添加子组件 # mainVBox.addWidget(funWidget,0,0,1,2) # mainVBox.addWidget(imgWidget,1,0) # mainVBox.addWidget(propsArea,1,1) self.bottomGrid = QGridLayout() self.bottomGrid.addWidget(self.imgWidget, 0, 0) self.bottomGrid.addWidget(self.propsArea, 0, 1) self.bottomGrid.setColumnStretch(0, 5) self.bottomGrid.setColumnStretch(1, 1) self.bottomWidget = QWidget() self.bottomWidget.setLayout(self.bottomGrid) self.mainVBox.addWidget(self.funWidget) self.mainVBox.addWidget(self.bottomWidget) # mainVBox.setColumnStretch(0,5) # mainVBox.setColumnStretch(1,1) # mainVBox.setRowStretch(0,1) # mainVBox.setRowStretch(1,8) self.centerWidget.setLayout(self.mainVBox) self.setGeometry(200, 200, 1200, 800) self.setWindowTitle("图鸽1.0 --口罩识别 图像处理") self.setWindowIcon(QIcon('imgs/logo.png')) self.setCentralWidget(self.centerWidget) self.show() self.move_img_label() def move_img_label(self): widget_rect = self.imgWidget.rect() label_rect = self.imgLabel.rect() new_x = (widget_rect.width() - label_rect.width()) / 2 if (widget_rect.width() - label_rect.width())>=0 else 0 new_y = (widget_rect.height() - label_rect.height()) / 2 if (widget_rect.height() - label_rect.height())>=0 else 0 self.imgLabel.move(new_x,new_y) def use_cam(self): if self.isCamUsed: ret, self.origin = self.cap.read() if self.isDetecting: cv2.imwrite('buffer.jpg',self.origin) self.objects=self.detector.detect(source='buffer.jpg') #图像处理 self.current=self.origin.copy() for item in self.objects: if (item[0] == 'mask'): color = (0, 255, 255) rbg = (255, 255, 0) text = '医用外科口罩' else: color = (0, 255, 0) rbg = (0, 255, 0) text = 'N95口罩' cv2.rectangle(self.current, (int(item[1][0]), int(item[1][1])), (int(item[1][2]), int(item[1][3])), color, 3) # 添加文字 img = Image.fromarray(cv2.cvtColor(self.current, cv2.COLOR_BGR2RGB)) draw = ImageDraw.Draw(img) font = ImageFont.truetype('simhei.ttf', 25, encoding="utf-8") draw.text((int(item[1][0]), int(item[1][1]) - 30), text, rbg, font=font) self.current = cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR) self.show_Img() else: self.current=self.origin.copy() self.show_Img() def setTimer(self): if self.isCamUsed: #关闭摄像头 self.timer.stop() self.cap.release() self.btn_camera.setIcon(QIcon('imgs/camera.png')) self.btn_shot.setEnabled(False) self.isCamUsed=False self.btn_detect.setEnabled(False) self.btn_camera.setToolTip('开启摄像头') #无论是否开启都关闭 self.isDetecting=False self.btn_detect.setIcon(QIcon('imgs/detect.png')) self.btn_detect.setToolTip('开启口罩识别') #修改Label self.imgLabel.setText("选择一张图片以开始") self.hasOrigin=False self.move_img_label() else: #开启摄像头 #先保存未保存的图片 self.auto_save() #删除图片 self.current='' #删除objects self.objects=[] self.cap = cv2.VideoCapture(0) self.timer.start(100) self.btn_camera.setIcon(QIcon('imgs/camera-close.png')) self.btn_camera.setToolTip('关闭摄像头') self.btn_shot.setEnabled(True) self.isCamUsed=True self.btn_detect.setEnabled(True) def openFile(self): #关闭摄像头 if self.isCamUsed: self.setTimer() file_path, file_type = QFileDialog.getOpenFileName(self, "打开图片文件", "./", '图片文件 (*.jpg;*.png;*.bmp;*.jpeg)') if file_path=='': return else: #清空objects self.objects=[] self.origin = cv2.imread(file_path) self.hasOrigin=True self.return_to_default() self.current = self.origin.copy() self.show_Img() #打开图片而未编辑不需要自动保存 #将处理完的图像缩放后居中显示 def show_Img(self): widget_rect = self.imgWidget.rect() img_w=self.current.shape[1] img_h=self.current.shape[0] max_w= widget_rect.width()-100 max_h=widget_rect.height()-100 if img_w <= max_w and img_h <=max_h: #图片比边框小 dst_w=img_w dst_h=img_h else: if img_w/max_w > img_h/max_h: #宽度超出比较大 dst_w=max_w dst_h=int(img_h*max_w/img_w) else: #高度超出比较大 dst_w = int(img_w * max_h / img_h) dst_h = max_h #重构图像 if len(self.current.shape)==2: self.current=cv2.cvtColor(self.current,cv2.COLOR_GRAY2BGR) self.display = cv2.cvtColor(cv2.resize(self.current, (dst_w, dst_h), cv2.INTER_LINEAR), cv2.COLOR_BGR2RGB) height, width, channel = self.display.shape step = channel * width qImg = QImage(self.display.data, width, height, step, QImage.Format_RGB888) # 操作label self.imgLabel.resize(width, height) self.move_img_label() self.imgLabel.setPixmap(QPixmap.fromImage(qImg)) else: self.display = cv2.cvtColor(cv2.resize(self.current, (dst_w, dst_h), cv2.INTER_LINEAR), cv2.COLOR_BGR2RGB) height, width, channel = self.display.shape step = channel * width qImg = QImage(self.display.data, width, height, step, QImage.Format_RGB888) # 操作label self.imgLabel.resize(width, height) self.move_img_label() self.imgLabel.setPixmap(QPixmap.fromImage(qImg)) #保存图像 def save_Img(self): if self.current!='': save_path,save_type = QFileDialog.getSaveFileName(self, "保存图片文件", "./", 'JPG文件 (*.jpg)') if save_path=='': pass else: cv2.imwrite(save_path, self.current) self.saved=True #自动保存 def auto_save(self): if not self.saved: cv2.imwrite('autosave.jpg', self.current) self.saved = True #是否开启识别 def set_detecting(self): if self.isDetecting: #关闭 self.isDetecting=False self.btn_detect.setIcon(QIcon('imgs/detect.png')) self.btn_detect.setToolTip('开启口罩识别') self.objects=[] else: #开启 self.isDetecting=True self.btn_detect.setIcon(QIcon('imgs/detect-close.png')) self.btn_detect.setToolTip('关闭口罩识别') #保存摄像头图像 def shot_Img(self): self.setTimer() self.current=self.origin self.hasOrigin=True self.return_to_default() self.saved=False self.show_Img() #图像操作 def change_brightness(self): brightness=self.slider_brightness.value() self.label_brightness.setText(f'亮度({brightness})') if self.hasOrigin: self.current = operation.brightness_change(self.origin, brightness) self.show_Img() self.saved=False self.btn_cache.setEnabled(True) self.objects=[] def move_horizen(self): value=self.edit_move_horizon.text() if value.isdigit() or (value.startswith('-') and value[1:-1].isdigit()): value=int(value) else: #不是文字就改为0 self.edit_move_horizon.setText('0') return if self.hasOrigin: self.current = operation.translation(self.origin, value, 0) self.show_Img() self.saved=False self.btn_cache.setEnabled(True) self.objects=[] def move_vertical(self): value=self.edit_move_vertical.text() if value.isdigit() or (value.startswith('-') and value[1:-1].isdigit()): value=int(value) else: #不是文字就改为0 self.edit_move_vertical.setText('0') return if self.hasOrigin: self.current = operation.translation(self.origin, 0, value) self.show_Img() self.saved=False self.btn_cache.setEnabled(True) self.objects=[] def rotate(self): angle = self.slider_rotation.value() self.label_rotation.setText(f'逆时针旋转({angle}°)') if self.hasOrigin: self.current = operation.rotation(self.origin, 1, angle) self.show_Img() self.saved=False self.btn_cache.setEnabled(True) self.objects=[] def flipH(self): if self.hasOrigin: self.current=operation.flip(self.current,0) self.show_Img() self.saved=False self.btn_cache.setEnabled(True) self.objects=[] def flipV(self): if self.hasOrigin: self.current=operation.flip(self.current,1) self.show_Img() self.saved=False self.btn_cache.setEnabled(True) self.objects=[] def scale(self): if self.hasOrigin: value=self.slider_zoom.value()/10 self.current=operation.scale(self.origin,value) self.label_zoom.setText(f'缩放({value})') self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def hist(self): if self.hasOrigin: cv2.imshow('Histogram',operation.histogram(self.current)) def contrast(self): if self.hasOrigin: value=self.slider_contrast.value() self.current=operation.contrast_change(self.origin,value) self.label_contrast.setText(f'对比度({value})') self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def average(self): if self.hasOrigin: self.current=smooth.average_filter(self.origin) self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def Gaussian(self): if self.hasOrigin: self.current=smooth.gaussian_filter(self.origin) self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def median(self): if self.hasOrigin: self.current=smooth.median_filter(self.origin) self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def bilater(self): if self.hasOrigin: self.current=smooth.bilater_filter(self.origin) self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def prewitt(self): if self.hasOrigin: self.current=sharp.prewitt(self.origin) self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def sobel(self): if self.hasOrigin: self.current=sharp.sobel(self.origin) self.current=cv2.normalize(self.current,dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) # self.current=self.current.astype('float32') self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def laplacian(self): if self.hasOrigin: self.current=sharp.laplacian(self.origin) self.current = cv2.normalize(self.current, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def log(self): if self.hasOrigin: self.current=sharp.log(self.origin) self.current = cv2.normalize(self.current, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def canny(self): if self.hasOrigin: self.current=sharp.canny(self.origin) self.current = cv2.normalize(self.current, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def noise(self): if self.hasOrigin: self.current=noise.noise(self.origin) self.show_Img() self.saved = False self.btn_cache.setEnabled(True) self.objects = [] def add_flower(self): if self.hasOrigin and (not self.isCamUsed) and len(self.objects)>0: flower=cv2.imread('flower.png') for item in self.objects: size=int((int(item[1][3])-int(item[1][1]))/5) #口罩高度的1/4 x= int(int(item[1][0])+ (int(item[1][2])-int(item[1][0]))*1.2/2) y = int(int(item[1][1]) + (int(item[1][3]) - int(item[1][1])) * 1.1 / 2) flower_dst=cv2.resize(flower,(size,size),cv2.INTER_LINEAR) #取出需要添加的部分 seg=self.current[y:y+size,x:x+size] seg=cv2.addWeighted(seg,1,flower_dst,1,0) self.current[y:y + size, x:x + size]=seg self.saved = False self.btn_cache.setEnabled(True) self.objects=[] self.show_Img() # 恢复默认 def return_to_default(self): # 把所有参数恢复 self.label_brightness.setText('亮度(0)') self.slider_brightness.setValue(0) self.edit_move_horizon.setText('0') self.edit_move_vertical.setText('0') self.label_rotation.setText('逆时针旋转(0°)') self.slider_rotation.setValue(0) self.label_zoom.setText('缩放(1)') self.slider_zoom.setValue(10) self.label_contrast.setText('对比度(50)') self.slider_contrast.setValue(50) # 如果有原图恢复原图 if self.hasOrigin: self.current = self.origin.copy() self.btn_cache.setEnabled(False) self.show_Img() #缓存 def cache(self): if self.hasOrigin: self.origin=self.current self.btn_cache.setEnabled(False) def resizeEvent(self, e): self.move_img_label() if self.current!='': self.show_Img()