271 lines
8.7 KiB
Python
271 lines
8.7 KiB
Python
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_()) |