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.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_())