import sys import cv2 import numpy from PyQt5.QtGui import QImage, QPixmap from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog, \ QComboBox, QMessageBox from PyQt5.QtCore import Qt from matplotlib import pyplot as plt class Example(QWidget): def __init__(self): super().__init__() self.image2 = None self.image = None self.label = QLabel() self.initUI() def initUI(self): self.label.setText('OpenCV Image') self.label.setAlignment(Qt.AlignCenter) btn_open = QPushButton('Открыть изображение') btn_open.clicked.connect(self.openImage) btn_procesar = QPushButton('Сохранить изображение') btn_procesar.clicked.connect(self.saveImage) f = open("Operate.txt", "r") attr = f.read().splitlines() f.close() self.oper = QComboBox() self.oper.addItems(attr) self.oper.currentIndexChanged.connect(self.combobox) top_bar = QHBoxLayout() top_bar.addWidget(btn_open) top_bar.addWidget(btn_procesar) top_bar.addWidget(self.oper) root = QVBoxLayout(self) root.addLayout(top_bar) root.addWidget(self.label) self.resize(540, 574) self.setWindowTitle('ST_2_2') self.show() def openImage(self): self.filename, _ = QFileDialog.getOpenFileName(None, 'Buscar Imagen', '.', 'Image Files (*.png *.jpg *.jpeg *.bmp)') if self.filename: with open(self.filename, "rb") as file: data = numpy.array(bytearray(file.read())) self.image = cv2.imdecode(data, cv2.IMREAD_UNCHANGED) self.mostrarImagen(self.image) self.image2 = self.image def saveImage(self): filename = QFileDialog.getSaveFileName(self, "QFileDialog.getSaveFileName()", "", "Image Files (*.jpg)") img = self.image2 cv2.imwrite(filename[0], img) def mostrarImagen(self, s): size = s.shape step = s.size / size[0] qformat = QImage.Format_Indexed8 if len(size) == 3: if size[2] == 4: qformat = QImage.Format_RGBA8888 else: qformat = QImage.Format_RGB888 img = QImage(s, size[1], size[0], step, qformat) img = img.rgbSwapped() self.label.setPixmap(QPixmap.fromImage(img)) self.resize(self.label.pixmap().size()) def combobox(self, index): if index == 0: self.i0() if index == 1: self.i1() if index == 2: self.i2() if index == 3: self.i3() if index == 4: self.i4() if index == 5: self.i5() if index == 6: self.i6() if index == 7: self.i7() if index == 8: self.i8() if index == 9: self.i9() if index == 10: self.i10() if index == 11: self.i11() if index == 12: self.i12() if index == 13: self.i13() if index == 14: self.i14() if index == 15: self.i15() if index == 16: self.i16() if index == 17: self.i17() if index == 18: self.i18() if index == 19: self.i19() if index == 20: self.i20() def i0(self): self.image2 = self.image self.mostrarImagen(self.image) def i1(self): self.image2 = self.image kernel = numpy.array([[-0.1, 0.2, -0.1], [0.2, 3.0, 0.2], [-0.1, 0.2, -0.1]]) self.image2 = cv2.filter2D(self.image2, -1, kernel) self.mostrarImagen(self.image2) def i2(self): self.image2 = self.image self.image2 = cv2.blur(self.image2, (5, 5)) self.mostrarImagen(self.image2) def i3(self): self.image2 = self.image self.image2 = cv2.medianBlur(self.image2, 5) self.mostrarImagen(self.image2) def i4(self): self.image2 = self.image self.image2 = cv2.GaussianBlur(self.image2, (9, 9), cv2.BORDER_DEFAULT) self.mostrarImagen(self.image2) def i5(self): self.image2 = self.image self.image2 = cv2.erode(self.image2, numpy.ones((11, 11))) self.mostrarImagen(self.image2) def i6(self): self.image2 = self.image self.image2 = cv2.dilate(self.image2, numpy.ones((11, 11))) self.mostrarImagen(self.image2) def i7(self): self.image2 = self.image kernel = numpy.ones((6, 6), numpy.uint8) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_OPEN, kernel, iterations=1) self.mostrarImagen(self.image2) def i8(self): self.image2 = self.image kernel = numpy.ones((6, 6), numpy.uint8) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_CLOSE, kernel, iterations=1) self.mostrarImagen(self.image2) def i9(self): self.image2 = self.image kernel = numpy.ones((6, 6), numpy.uint8) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_GRADIENT, kernel, iterations=1) self.mostrarImagen(self.image2) def i10(self): self.image2 = self.image kernel = numpy.ones((6, 6), numpy.uint8) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_TOPHAT, kernel, iterations=1) self.mostrarImagen(self.image2) def i11(self): self.image2 = self.image kernel = numpy.ones((6, 6), numpy.uint8) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_BLACKHAT, kernel, iterations=1) self.mostrarImagen(self.image2) def i12(self): self.image2 = self.image self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_BGR2GRAY) self.image2 = cv2.GaussianBlur(self.image2, (3, 3), 0) self.image2 = cv2.Sobel(self.image2, cv2.CV_64F, 1, 0, ksize=5) self.mostrarImagen(self.image2) def i13(self): self.image2 = self.image self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_BGR2GRAY) self.image2 = cv2.GaussianBlur(self.image2, (3, 3), 0) self.image2 = cv2.Sobel(self.image2, cv2.CV_64F, 0, 1, ksize=5) self.mostrarImagen(self.image2) def i14(self): self.image2 = self.image self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_BGR2GRAY) self.image2 = cv2.GaussianBlur(self.image2, (3, 3), 0) self.image2 = cv2.Sobel(self.image2, cv2.CV_8UC1, 0, 1, ksize=5) self.mostrarImagen(self.image2) def i15(self): self.image2 = self.image self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_RGB2GRAY) self.image2 = cv2.GaussianBlur(self.image2, (3, 3), 0) self.image2 = cv2.Laplacian(self.image2, cv2.CV_64F) self.mostrarImagen(self.image2) def i16(self): self.image2 = self.image self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_RGB2GRAY) self.image2 = cv2.blur(self.image2, (5, 5)) self.image2 = cv2.Canny(self.image2, 100, 100) self.mostrarImagen(self.image2) def i17(self): self.image2 = self.image color = ('b', 'g', 'r') for i, col in enumerate(color): histr = cv2.calcHist([self.image2], [i], None, [256], [0, 256]) plt.plot(histr, color=col) plt.xlim([0, 256]) plt.show() def i18(self): self.image2 = self.image self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_RGB2GRAY) self.image2 = cv2.equalizeHist(self.image2) self.mostrarImagen(self.image2) def i19(self): self.image2 = self.image self.image2 = cv2.line(self.image2, (15, 15), (270, 270), (76, 187, 23), 10) # линия self.image2 = cv2.rectangle(self.image2, (20, 20), (100, 100), (0, 0, 255), 10) # нарисуем четырехугольник self.image2 = cv2.circle(self.image2, (100, 100), 40, (0, 255, 0), 10) # нарисуем круг self.image = self.image2 self.mostrarImagen(self.image2) def i20(self): if self.filename: with open(self.filename, "rb") as file: data = numpy.array(bytearray(file.read())) self.image = cv2.imdecode(data, cv2.IMREAD_UNCHANGED) self.mostrarImagen(self.image) self.mostrarImagen(self.image) self.image2 = self.image def closeEvent(self, event): close = QMessageBox.question(self, "Выход", "Вы хотите завершить работу?", QMessageBox.Yes | QMessageBox.No) if close == QMessageBox.Yes: event.accept() else: event.ignore() if __name__ == '__main__': app = QApplication(sys.argv) win = Example() sys.exit(app.exec_())