ADD file via upload

main
m7xmo5t92 5 months ago
parent dc483a2be6
commit d227270fac

@ -0,0 +1,105 @@
import sys
import cv2
import numpy as np
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QGraphicsView, QGraphicsScene, QGraphicsPixmapItem, QFileDialog, QMenuBar, QStatusBar
from PyQt5.QtCore import QRect, QCoreApplication, QMetaObject
from PyQt5.QtGui import QPixmap, QImage
class Ui_MainWindow:
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName("MainWindow")
MainWindow.resize(950, 750)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton_1 = QPushButton(self.centralwidget)
self.pushButton_1.setObjectName("pushButton_1")
self.pushButton_1.setGeometry(QRect(100, 550, 240, 71))
self.pushButton_2 = QPushButton(self.centralwidget)
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_2.setGeometry(QRect(370, 550, 220, 71))
self.pushButton_3 = QPushButton(self.centralwidget)
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_3.setGeometry(QRect(620, 550, 230, 71))
self.graphicsView = QGraphicsView(self.centralwidget)
self.graphicsView.setObjectName("graphicsView")
self.graphicsView.setGeometry(QRect(70, 60, 400, 450))
self.graphicsView_2 = QGraphicsView(self.centralwidget)
self.graphicsView_2.setObjectName("graphicsView_2")
self.graphicsView_2.setGeometry(QRect(500, 60, 400, 450))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName("menubar")
self.menubar.setGeometry(QRect(0, 0, 800, 23))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", "素描风格转换系统", None))
self.pushButton_2.setText(QCoreApplication.translate("MainWindow", "转换至素描风格", None))
self.pushButton_1.setText(QCoreApplication.translate("MainWindow", "选择图片", None))
self.pushButton_3.setText(QCoreApplication.translate("MainWindow", "保存图片", None))
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_1.clicked.connect(self.select_image)
self.pushButton_2.clicked.connect(self.convert_to_sketch)
self.pushButton_3.clicked.connect(self.save_image)
self.src_image = None
self.dst_image = None
def select_image(self):
options = QFileDialog.Options()
file_name, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "Images (*.png *.xpm *.jpg *.bmp *.gif)", options=options)
if file_name:
self.src_image = cv2.imread(file_name)
self.display_image(self.src_image, self.graphicsView)
def convert_to_sketch(self):
if self.src_image is not None:
#1.将图片转为灰度图
gray = cv2.cvtColor(self.src_image, cv2.COLOR_BGR2GRAY)
#2.将灰度图取反
gray_inverse = cv2.bitwise_not(gray)
#3. 对取反后的图像进行高斯模糊操作,指定了一个15x15的高斯内核
gray_inverse = cv2.GaussianBlur(gray_inverse, (15, 15), 50)
#4. 颜色减淡混合
self.dst_image = cv2.divide(gray, 255 - gray_inverse, scale=256)
self.display_image(self.dst_image, self.graphicsView_2)
def save_image(self):
if self.dst_image is not None:
options = QFileDialog.Options()
file_name, _ = QFileDialog.getSaveFileName(self, "保存图片", "", "Images (*.png *.xpm *.jpg *.bmp *.gif)", options=options)
if file_name:
cv2.imwrite(file_name, self.dst_image)
def display_image(self, image, view):
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
h, w, ch = image.shape
bytes_per_line = ch * w
q_image = QImage(image.data, w, h, bytes_per_line, QImage.Format_RGB888)
pixmap = QPixmap.fromImage(q_image)
scene = QGraphicsScene()
scene.addItem(QGraphicsPixmapItem(pixmap))
view.setScene(scene)
view.fitInView(scene.itemsBoundingRect(), mode=1)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
Loading…
Cancel
Save