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.
246 lines
9.7 KiB
246 lines
9.7 KiB
2 years ago
|
import sys
|
||
|
import cv2
|
||
|
from PyQt5.QtGui import *
|
||
|
from PyQt5.QtWidgets import *
|
||
|
from PyQt5.QtCore import *
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
from custom.stackedWidget import StackedWidget
|
||
|
from custom.treeView import FileSystemTreeView
|
||
|
from custom.listWidgets import FuncListWidget, UsedListWidget, FuncListWidget1, FuncListWidget2, FuncListWidget3, \
|
||
|
FuncListWidget4, FuncListWidget5, FuncListWidget6, FuncListWidget7
|
||
|
from custom.graphicsView import GraphicsView
|
||
|
from custom.treeWidgets import FuncTreeWidget
|
||
|
|
||
|
|
||
|
class MyApp(QMainWindow):
|
||
|
def __init__(self):
|
||
|
super(MyApp, self).__init__()
|
||
|
self.tool_bar = self.addToolBar('工具栏')
|
||
|
self.action_right_rotate = QAction(QIcon("icons/右旋转.png"), "向右旋转90", self)
|
||
|
self.action_left_rotate = QAction(QIcon("icons/左旋转.png"), "向左旋转90°", self)
|
||
|
self.action_histogram = QAction(QIcon("icons/直方图.png"), "直方图", self)
|
||
|
self.action_right_rotate.triggered.connect(self.right_rotate)
|
||
|
self.action_left_rotate.triggered.connect(self.left_rotate)
|
||
|
self.action_histogram.triggered.connect(self.histogram)
|
||
|
self.tool_bar.addActions((self.action_left_rotate, self.action_right_rotate, self.action_histogram))
|
||
|
|
||
|
self.useListWidget = UsedListWidget(self)
|
||
|
self.funcListWidget = FuncListWidget(self)
|
||
|
self.funcListWidget1 = FuncListWidget1(self)
|
||
|
self.funcListWidget2 = FuncListWidget2(self)
|
||
|
self.funcListWidget3 = FuncListWidget3(self)
|
||
|
self.funcListWidget4 = FuncListWidget4(self)
|
||
|
self.funcListWidget5 = FuncListWidget5(self)
|
||
|
self.funcListWidget6 = FuncListWidget6(self)
|
||
|
self.funcListWidget7 = FuncListWidget7(self)
|
||
|
self.stackedWidget = StackedWidget(self)
|
||
|
self.fileSystemTreeView = FileSystemTreeView(self)
|
||
|
self.graphicsView = GraphicsView(self)
|
||
|
self.funcTreeWidget = FuncTreeWidget(self)
|
||
|
|
||
|
self.dock_fun = QDockWidget(self)
|
||
|
self.dock_fun.setWidget(self.funcTreeWidget)
|
||
|
self.dock_fun.setTitleBarWidget(QLabel('图像操作'))
|
||
|
self.dock_fun.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
self.dock_fun.setMaximumHeight(500)
|
||
|
|
||
|
self.dock_file = QDockWidget(self)
|
||
|
self.dock_file.setWidget(self.fileSystemTreeView)
|
||
|
self.dock_file.setTitleBarWidget(QLabel('目录'))
|
||
|
self.dock_file.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_func = QDockWidget(self)
|
||
|
self.dock_func.setWidget(self.funcListWidget)
|
||
|
self.dock_func.setTitleBarWidget(QLabel('其他操作'))
|
||
|
self.dock_func.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_func1 = QDockWidget(self)
|
||
|
self.dock_func1.setWidget(self.funcListWidget1)
|
||
|
self.dock_func1.setTitleBarWidget(QLabel('裁剪'))
|
||
|
self.dock_func1.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_func2 = QDockWidget(self)
|
||
|
self.dock_func2.setWidget(self.funcListWidget2)
|
||
|
self.dock_func2.setTitleBarWidget(QLabel('光效'))
|
||
|
self.dock_func2.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_func3 = QDockWidget(self)
|
||
|
self.dock_func3.setWidget(self.funcListWidget3)
|
||
|
self.dock_func3.setTitleBarWidget(QLabel('色彩'))
|
||
|
self.dock_func3.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_func4 = QDockWidget(self)
|
||
|
self.dock_func4.setWidget(self.funcListWidget4)
|
||
|
self.dock_func4.setTitleBarWidget(QLabel('HSL'))
|
||
|
self.dock_func4.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_func5 = QDockWidget(self)
|
||
|
self.dock_func5.setWidget(self.funcListWidget5)
|
||
|
self.dock_func5.setTitleBarWidget(QLabel('特效'))
|
||
|
self.dock_func5.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_func6 = QDockWidget(self)
|
||
|
self.dock_func6.setWidget(self.funcListWidget6)
|
||
|
self.dock_func6.setTitleBarWidget(QLabel('风格迁移'))
|
||
|
self.dock_func6.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_func7 = QDockWidget(self)
|
||
|
self.dock_func7.setWidget(self.funcListWidget7)
|
||
|
self.dock_func7.setTitleBarWidget(QLabel('质感'))
|
||
|
self.dock_func7.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_used = QDockWidget(self)
|
||
|
self.dock_used.setWidget(self.useListWidget)
|
||
|
self.dock_used.setTitleBarWidget(QLabel('已选操作'))
|
||
|
self.dock_used.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
self.dock_used.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
|
||
|
self.dock_attr = QDockWidget(self)
|
||
|
self.dock_attr.setWidget(self.stackedWidget)
|
||
|
self.dock_attr.setTitleBarWidget(QLabel('属性'))
|
||
|
self.dock_attr.setFeatures(QDockWidget.NoDockWidgetFeatures)
|
||
|
self.dock_attr.close()
|
||
|
|
||
|
self.setCentralWidget(self.graphicsView)
|
||
|
self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_file)
|
||
|
self.addDockWidget(Qt.RightDockWidgetArea, self.dock_attr)
|
||
|
self.addDockWidget(Qt.RightDockWidgetArea, self.dock_fun)
|
||
|
self.splitDockWidget(self.dock_fun, self.dock_func, Qt.Vertical)
|
||
|
self.splitDockWidget(self.dock_file, self.dock_used, Qt.Vertical)
|
||
|
self.dock_func1.hide()
|
||
|
self.dock_func2.hide()
|
||
|
self.dock_func3.hide()
|
||
|
self.dock_func4.hide()
|
||
|
self.dock_func5.hide()
|
||
|
self.dock_func6.hide()
|
||
|
self.dock_func7.hide()
|
||
|
self.setWindowTitle('Opencv图像处理')
|
||
|
self.setWindowIcon(QIcon('icons/main.png'))
|
||
|
self.src_img = None
|
||
|
self.cur_img = None
|
||
|
|
||
|
def update_dock(self, item):
|
||
|
if item == "裁剪":
|
||
|
self.dock_func1.show()
|
||
|
self.dock_func2.hide()
|
||
|
self.dock_func3.hide()
|
||
|
self.dock_func4.hide()
|
||
|
self.dock_func5.hide()
|
||
|
self.dock_func6.hide()
|
||
|
self.dock_func7.hide()
|
||
|
self.dock_func.hide()
|
||
|
self.splitDockWidget(self.dock_fun, self.dock_func1, Qt.Vertical)
|
||
|
elif item == "光效":
|
||
|
self.dock_func1.hide()
|
||
|
self.dock_func2.show()
|
||
|
self.dock_func3.hide()
|
||
|
self.dock_func4.hide()
|
||
|
self.dock_func5.hide()
|
||
|
self.dock_func6.hide()
|
||
|
self.dock_func7.hide()
|
||
|
self.dock_func.hide()
|
||
|
self.splitDockWidget(self.dock_fun, self.dock_func2, Qt.Vertical)
|
||
|
elif item == "色彩":
|
||
|
self.dock_func1.hide()
|
||
|
self.dock_func2.hide()
|
||
|
self.dock_func3.show()
|
||
|
self.dock_func4.hide()
|
||
|
self.dock_func5.hide()
|
||
|
self.dock_func6.hide()
|
||
|
self.dock_func7.hide()
|
||
|
self.dock_func.hide()
|
||
|
self.splitDockWidget(self.dock_fun, self.dock_func3, Qt.Vertical)
|
||
|
elif item == "HSL":
|
||
|
self.dock_func1.hide()
|
||
|
self.dock_func2.hide()
|
||
|
self.dock_func3.hide()
|
||
|
self.dock_func4.show()
|
||
|
self.dock_func5.hide()
|
||
|
self.dock_func6.hide()
|
||
|
self.dock_func7.hide()
|
||
|
self.dock_func.hide()
|
||
|
self.splitDockWidget(self.dock_fun, self.dock_func4, Qt.Vertical)
|
||
|
elif item == "特效":
|
||
|
self.dock_func1.hide()
|
||
|
self.dock_func2.hide()
|
||
|
self.dock_func3.hide()
|
||
|
self.dock_func4.hide()
|
||
|
self.dock_func5.show()
|
||
|
self.dock_func6.hide()
|
||
|
self.dock_func7.hide()
|
||
|
self.dock_func.hide()
|
||
|
self.splitDockWidget(self.dock_fun, self.dock_func5, Qt.Vertical)
|
||
|
elif item == "风格迁移":
|
||
|
self.dock_func1.hide()
|
||
|
self.dock_func2.hide()
|
||
|
self.dock_func3.hide()
|
||
|
self.dock_func4.hide()
|
||
|
self.dock_func5.hide()
|
||
|
self.dock_func6.show()
|
||
|
self.dock_func7.hide()
|
||
|
self.dock_func.hide()
|
||
|
self.splitDockWidget(self.dock_fun, self.dock_func6, Qt.Vertical)
|
||
|
elif item == "其他操作":
|
||
|
self.dock_func1.hide()
|
||
|
self.dock_func2.hide()
|
||
|
self.dock_func3.hide()
|
||
|
self.dock_func4.hide()
|
||
|
self.dock_func5.hide()
|
||
|
self.dock_func6.hide()
|
||
|
self.dock_func7.hide()
|
||
|
self.dock_func.show()
|
||
|
self.splitDockWidget(self.dock_fun, self.dock_func, Qt.Vertical)
|
||
|
elif item == "质感":
|
||
|
self.dock_func1.hide()
|
||
|
self.dock_func2.hide()
|
||
|
self.dock_func3.hide()
|
||
|
self.dock_func4.hide()
|
||
|
self.dock_func5.hide()
|
||
|
self.dock_func6.hide()
|
||
|
self.dock_func7.show()
|
||
|
self.dock_func.hide()
|
||
|
self.splitDockWidget(self.dock_fun, self.dock_func7, Qt.Vertical)
|
||
|
|
||
|
def update_image(self):
|
||
|
if self.src_img is None:
|
||
|
return
|
||
|
img = self.process_image()
|
||
|
self.cur_img = img
|
||
|
self.graphicsView.update_image(img)
|
||
|
|
||
|
def change_image(self, img):
|
||
|
self.src_img = img
|
||
|
img = self.process_image()
|
||
|
self.cur_img = img
|
||
|
self.graphicsView.change_image(img)
|
||
|
|
||
|
def process_image(self):
|
||
|
img = self.src_img.copy()
|
||
|
for i in range(self.useListWidget.count()):
|
||
|
img = self.useListWidget.item(i)(img)
|
||
|
return img
|
||
|
|
||
|
def right_rotate(self):
|
||
|
self.graphicsView.rotate(90)
|
||
|
|
||
|
def left_rotate(self):
|
||
|
self.graphicsView.rotate(-90)
|
||
|
|
||
|
def histogram(self):
|
||
|
color = ('b', 'g', 'r')
|
||
|
for i, col in enumerate(color):
|
||
|
histr = cv2.calcHist([self.cur_img], [i], None, [256], [0, 256])
|
||
|
histr = histr.flatten()
|
||
|
plt.plot(range(256), histr, color=col)
|
||
|
plt.xlim([0, 256])
|
||
|
plt.show()
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
app = QApplication(sys.argv)
|
||
|
app.setStyleSheet(open('./custom/styleSheet.qss', encoding='utf-8').read())
|
||
|
window = MyApp()
|
||
|
window.show()
|
||
|
sys.exit(app.exec_())
|