This repository has been archived on 2022-12-09. You can view files and clone it, but cannot push or open issues or pull requests.
2022-11-24 10:52:38 +03:00

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