#coding:
# tf8
from PIL import Image, ImageDraw,ImageFont
from PyQt5.QtWidgets import (QMainWindow, QMenuBar, QToolBar, QTextEdit, QAction, QApplication,
qApp, QMessageBox, QFileDialog,QLabel, QHBoxLayout,QGroupBox,
QComboBox,QGridLayout,QLineEdit,QSlider,QPushButton)
from PyQt5.QtGui import *
from PyQt5.QtGui import QPalette,QImage,QPixmap,QBrush
from PyQt5.QtCore import *
import sys
import cv2 as cv
import numpy as np
import DIP_Code as ph
import time
from pylab import *
class Window(QMainWindow):
image = 0
path = ' '
makeupvalue = 25
alpha = 0.6
r = 0
g = 0
b = 0
text = ' '
p_x = 50
p_y = 150
fontsize = 1
fonttype = 1
fontbold = 1
angle = 0
change_path = "change/change.png"
IMG1 = ' '
IMG2 = 'null'
def __init__(self):
super(Window, self).__init__()
#界面初始化
self.createMenu()
self.image_show()
self.font_GroupBox()
self.initUI()
# 菜单栏
def createMenu(self):
# menubar = QMenuBar(self)
menubar = self.menuBar()
menu1 = menubar.addMenu("文件")
menu1.addAction("打开")
menu1.addAction("保存")
menu2 = menubar.addMenu("原图")
menu2.addAction("返回原图")
menu3 = menubar.addMenu("基础操作")
menu3_1 = menu3.addMenu("彩色空间转换")
menu3_1.addAction("转HSV")
menu3_1.addAction("转GRAY")
menu3_1.addAction("转BGRA")
menu3_1.addAction("转HLS")
menu3_1.addAction("转YUV")
menu3.addAction("FFT变换")
menu3.addAction("DCT变换")
menu4 = menubar.addMenu("直方图")
menu4_1 = menu4.addMenu("拉伸")
menu4_1.addAction("线性拉伸")
menu4_1.addAction("非线性拉伸")
menu4_2 = menu4.addMenu("均衡")
menu4_2.addAction("自适应均衡")
menu4_2.addAction("全局均衡")
menu5 = menubar.addMenu("滤镜")
menu5_1 = menu5.addMenu("平滑")
menu5_1.addAction("均值模糊")
menu5_1.addAction("高斯模糊")
menu5_1.addAction("中值模糊")
menu5_2 = menu5.addMenu("锐化")
menu5_2.addAction("锐化")
# menu5_2.addAction("锐化2")
# menu5_2.addAction("锐化3")
menu5.addAction("美颜")
menu6 = menubar.addMenu("图像恢复")
menu6_3 = menu6.addMenu("缩放")
menu6_3.addAction("放大")
menu6_3.addAction("缩小")
menu6_1 = menu6.addMenu("旋转")
menu6_1.addAction("右旋转90度")
menu6_1.addAction("左旋转90度")
menu6.addAction("投影矫正")
menu6.addAction("模糊消除")
menu7 = menubar.addMenu("图像合成")
menu7.addAction("图像拼接")
menu7.addAction("更换背景")
menu7.addAction("换头")
#发射信号绑定信号槽
menu1.triggered[QAction].connect(self.menu1_process)
menu2.triggered[QAction].connect(self.menu2_process)
menu3.triggered[QAction].connect(self.menu3_process)
menu4.triggered[QAction].connect(self.menu4_process)
menu5.triggered[QAction].connect(self.menu5_process)
menu6.triggered[QAction].connect(self.menu6_process)
menu7.triggered[QAction].connect(self.menu7_process)
#像素图显示
def image_show(self):
self.lbl = QLabel(self)
self.lbl.setPixmap(QPixmap('E:/photoedit/change/source.png'))
self.lbl.setAlignment(Qt.AlignCenter) #图像显示区,居中
self.lbl.setGeometry(450, 35, 800, 500)
self.lbl.setStyleSheet("border: 2px solid black")
#工具处理布局
def font_GroupBox(self):
text_lbl = QLabel("输入文字:",self)
text_lbl.setGeometry(25, 35, 50, 30)
text_text = QLineEdit(self)
text_text.setGeometry(90, 35, 250, 30)
xy_lbl = QLabel("输入坐标:",self)
xy_lbl.setGeometry(25, 70, 50, 30)
x_text = QLineEdit(self)
x_text.setGeometry(90, 70, 30, 30)
y_text = QLineEdit(self)
y_text.setGeometry(130, 70, 30, 30)
xy_btn = QPushButton('坐标确认', self)
xy_btn.setGeometry(190, 70, 60, 30)
size_lbl = QLabel("字体大小:",self)
size_lbl.setGeometry(25, 105, 50, 30)
size_combo = QComboBox(self)
size_combo.addItem("1")
size_combo.addItem("2")
size_combo.addItem("3")
size_combo.addItem("4")
size_combo.addItem("5")
size_combo.addItem("6")
size_combo.addItem("7")
size_combo.setGeometry(90, 105, 50, 30)
bold_lbl = QLabel("字体厚度:",self)
bold_lbl.setGeometry(170, 105, 50, 30)
bold_combo = QComboBox(self)
bold_combo.addItem("1")
bold_combo.addItem("2")
bold_combo.addItem("3")
bold_combo.addItem("4")
bold_combo.addItem("5")
bold_combo.addItem("6")
bold_combo.addItem("7")
bold_combo.setGeometry(235, 105, 50, 30)
color_lbl = QLabel("字体颜色:",self)
color_lbl.setGeometry(25, 140, 50, 30)
color_combo = QComboBox(self)
color_combo.addItem("黑")
color_combo.addItem("白")
color_combo.addItem("红")
color_combo.addItem("橙")
color_combo.addItem("黄")
color_combo.addItem("蓝")
color_combo.addItem("绿")
color_combo.addItem("紫")
color_combo.setGeometry(90, 140, 50, 30)
type_lbl = QLabel("字体样式:",self)
type_lbl.setGeometry(170, 140, 50, 30)
type_combo = QComboBox(self)
type_combo.addItem("1")
type_combo.addItem("2")
type_combo.addItem("3")
type_combo.addItem("4")
type_combo.addItem("5")
type_combo.addItem("6")
type_combo.addItem("7")
type_combo.setGeometry(235, 140, 50, 30)
surebtn = QPushButton('旋转确认', self)
surebtn.setCheckable(True)
surebtn.setGeometry(200, 205, 60, 30)
angle_lbl = QLabel("图像旋转角度:",self)
angle_lbl.setGeometry(25, 200, 80, 40)
angle_text = QLineEdit(self)
angle_text.setGeometry(110, 200, 65, 40)
makeup_lbl = QLabel("美颜效果:",self)
makeup_lbl.setGeometry(25, 300, 100, 40)
sld = QSlider(Qt.Horizontal, self)
sld.setFocusPolicy(Qt.NoFocus)
sld.setGeometry(50, 350, 200, 30)
# 信号与槽连接 文本框输入连接
text_text.textChanged[str].connect(self.input_text)
x_text.textChanged[str].connect(self.input_px)
y_text.textChanged[str].connect(self.input_py)
xy_btn.clicked[bool].connect(self.xy_press)
size_combo.activated[str].connect(self.inputsize)
bold_combo.activated[str].connect(self.inputbold)
type_combo.activated[str].connect(self.inputtype)
color_combo.activated[str].connect(self.inputcolor)
angle_text.textChanged[str].connect(self.input_angle) #输入旋转角度
surebtn.clicked[bool].connect(self.presssure) #旋转确认
sld.valueChanged[int].connect(self.makeupValue) #美颜滑条
def initUI(self):
self.setGeometry(50, 50, 1300, 550)
self.setWindowTitle('DIP_Course')
self.setWindowIcon(QIcon(r"E:\DIPcourse\images\lena.jpg"))
palette = QPalette()
palette.setColor(self.backgroundRole(), QColor(255,255,255))
self.setPalette(palette)
self.show()
#菜单1处理
def menu1_proce