From c6e36a2f7288a83fd6a3b5b67efd65ca218dccc9 Mon Sep 17 00:00:00 2001 From: vlad Date: Thu, 24 Nov 2022 10:52:38 +0300 Subject: [PATCH] refactoring --- lab2_1/lab2_1.py | 291 ++++++++++++++++++++++++----------------------- lab2_1/test.jpg | Bin 0 -> 112500 bytes lab2_2/lab2_2.py | 240 +++++++++++++++++++------------------- lab4/lab4.py | 188 +++++++++++++++--------------- 4 files changed, 352 insertions(+), 367 deletions(-) create mode 100644 lab2_1/test.jpg diff --git a/lab2_1/lab2_1.py b/lab2_1/lab2_1.py index b3e7937..d5aae29 100644 --- a/lab2_1/lab2_1.py +++ b/lab2_1/lab2_1.py @@ -1,161 +1,162 @@ import os import sys +import traceback + import cv2 import numpy as np from matplotlib import pyplot as plt -def menu(): - print("Выберите пункт меню:\n1.Linear filter\n2.Blur\n3.Median blur\n4.GaussianBlur\n5.Erode") - print("6.Dilate\n7.MORPH_OPERATIONS\n8.Sobel\n9.Laplacian\n10.Canny\n11.CalcHist\n12.EqualizeHist") - print("13.Save\n14.Add Figure\n15.Del Figure\n16.Exit") +SOURCE_IMAGE = "test.jpg" + + +def filter_linear(image): + kernel = np.array([[-0.1, 0.2, -0.1], [0.2, 3.0, 0.2], [-0.1, 0.2, -0.1]]) + cv2.imshow("Исходное изображение", image) + cv2.imshow("Результат", cv2.filter2D(image.copy(), -1, kernel)) + + +def filter_blur(image): + cv2.imshow("Исходное изображение", image) + cv2.imshow("Результат", cv2.blur(image.copy(), (5, 5))) + + +def filter_median_blur(image): + cv2.imshow("Исходное изображение", image) + cv2.imshow("Результат", cv2.medianBlur(image.copy(), 5)) + + +def filter_gauss_blur(image): + cv2.imshow("Исходное изображение", image) + cv2.imshow("Результат", cv2.GaussianBlur(image.copy(), (9, 9), cv2.BORDER_DEFAULT)) + + +def filter_erode(image): + cv2.imshow("Исходное изображение", image) + cv2.imshow("Результат", cv2.erode(image.copy(), np.ones((11, 11)))) + + +def filter_dilate(image): + cv2.imshow("Исходное изображение", image) + cv2.imshow("Результат", cv2.dilate(image.copy(), np.ones((11, 11)))) + + +def filter_morph(image): + # TODO переписать + image2 = image.copy() + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + cv2.imshow("Image_load", image) + kernel = np.ones((6, 6), np.uint8) + image3 = cv2.morphologyEx(image3, cv2.MORPH_OPEN, kernel, iterations=1) + cv2.imshow("MORPH_OPEN", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.morphologyEx(image3, cv2.MORPH_CLOSE, kernel, iterations=1) + cv2.imshow("MORPH_CLOSE", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.morphologyEx(image3, cv2.MORPH_GRADIENT, kernel, iterations=1) + cv2.imshow("MORPH_GRADIENT", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.morphologyEx(image3, cv2.MORPH_TOPHAT, kernel, iterations=1) + cv2.imshow("MORPH_TOPHAT", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.morphologyEx(image3, cv2.MORPH_BLACKHAT, kernel, iterations=1) + cv2.imshow("MORPH_BLACKHAT", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + + +def filter_sobel(image): + image2 = image.copy() + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.GaussianBlur(image3, (3, 3), 0) + im3 = cv2.Sobel(image3, cv2.CV_64F, 1, 0, ksize=5) + im4 = cv2.Sobel(image3, cv2.CV_64F, 0, 1, ksize=5) + im5 = cv2.Sobel(image3, cv2.CV_8UC1, 0, 1, ksize=5) + cv2.imshow("Image_load", image) + cv2.imshow("Result_Image_X", im3) # x + cv2.imshow("Result_Image_Y", im4) # y + cv2.imshow("Result_Gradient", im5) # gradient + + +def filter_laplacian(image): + image2 = image.copy() + image3 = cv2.cvtColor(image2, cv2.COLOR_RGB2GRAY) + image3 = cv2.GaussianBlur(image3, (3, 3), 0) + im3 = cv2.Laplacian(image3, cv2.CV_64F) + cv2.imshow("Image_load", image) + cv2.imshow("Result_Image", im3) + + +def filter_canny(image): + image2 = image.copy() + image3 = cv2.blur(image2, (5, 5)) + image3 = cv2.Canny(image3, 100, 100) + cv2.imshow("Image_load", image) + cv2.imshow("Result_Image", image3) + + +def filter_calc_hist(image): + image2 = image.copy() + color = ('b', 'g', 'r') + cv2.imshow("Image_load", image) + for i, col in enumerate(color): + histr = cv2.calcHist([image2], [i], None, [256], [0, 256]) + plt.plot(histr, color=col) + plt.xlim([0, 256]) + plt.show() + plt.close() + + +def filter_equalize_hist(image): + cv2.imshow("Исходное изображение", image) + cv2.imshow("Результат", cv2.equalizeHist(cv2.cvtColor(image.copy(), cv2.COLOR_RGB2GRAY))) + + +functions_list = { + "lf": {"func": filter_linear, "help": "Linear filter"}, + "bl": {"func": filter_blur, "help": "Blur"}, + "mb": {"func": filter_median_blur, "help": "Median blur"}, + "gb": {"func": filter_gauss_blur, "help": "GaussianBlur"}, + "er": {"func": filter_erode, "help": "Erode"}, + "di": {"func": filter_dilate, "help": "Dilate"}, + "mo": {"func": filter_morph, "help": "MORPH_OPERATIONS"}, + "so": {"func": filter_sobel, "help": "Sobel"}, + "la": {"func": filter_laplacian, "help": "Laplacian"}, + "ca": {"func": filter_canny, "help": "Canny"}, + "cl": {"func": filter_calc_hist, "help": "CalcHist"}, + "eh": {"func": filter_equalize_hist, "help": "EqualizeHist"}, + "q": {"func": lambda image: sys.exit(0), "help": "Exit"}, +} + + +def print_help(): + print("Доступные функции:") + for k in functions_list: + print(f" {k} - {functions_list[k]['help']}") def main(): - image1 = cv2.imread("D:\\MACH\\LAB_2\\image0.jpg") - image2 = image1.copy() - im = image1.copy() + image1 = cv2.imread(SOURCE_IMAGE) while True: - menu() try: - s = int(input()) - if s == 1: - image2 = image1.copy() - kernel = np.array([[-0.1, 0.2, -0.1], [0.2, 3.0, 0.2], [-0.1, 0.2, -0.1]]) - image2 = cv2.filter2D(image2, -1, kernel) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", image2) - cv2.waitKey(0) - if s == 2: - image2 = image1.copy() - image2 = cv2.blur(image2, (5, 5)) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", image2) - cv2.waitKey(0) - if s == 3: - image2 = image1.copy() - image2 = cv2.medianBlur(image2, 5) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", image2) - cv2.waitKey(0) - if s == 4: - image2 = image1.copy() - image2 = cv2.GaussianBlur(image2, (9, 9), cv2.BORDER_DEFAULT) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", image2) - cv2.waitKey(0) - if s == 5: - image2 = image1.copy() - image2 = cv2.erode(image2, np.ones((11, 11))) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", image2) - cv2.waitKey(0) - if s == 6: - image2 = image1.copy() - image2 = cv2.dilate(image2, np.ones((11, 11))) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", image2) - cv2.waitKey(0) - if s == 7: - image2 = image1.copy() - image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) - cv2.imshow("Image_load", image1) - kernel = np.ones((6, 6), np.uint8) - image3 = cv2.morphologyEx(image3, cv2.MORPH_OPEN, kernel, iterations=1) - cv2.imshow("MORPH_OPEN", image3) - image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) - image3 = cv2.morphologyEx(image3, cv2.MORPH_CLOSE, kernel, iterations=1) - cv2.imshow("MORPH_CLOSE", image3) - image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) - image3 = cv2.morphologyEx(image3, cv2.MORPH_GRADIENT, kernel, iterations=1) - cv2.imshow("MORPH_GRADIENT", image3) - image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) - image3 = cv2.morphologyEx(image3, cv2.MORPH_TOPHAT, kernel, iterations=1) - cv2.imshow("MORPH_TOPHAT", image3) - image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) - image3 = cv2.morphologyEx(image3, cv2.MORPH_BLACKHAT, kernel, iterations=1) - cv2.imshow("MORPH_BLACKHAT", image3) - image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) - cv2.waitKey(0) - if s == 8: - image2 = image1.copy() - image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) - image3 = cv2.GaussianBlur(image3, (3, 3), 0) - im3 = cv2.Sobel(image3, cv2.CV_64F, 1, 0, ksize=5) - im4 = cv2.Sobel(image3, cv2.CV_64F, 0, 1, ksize=5) - im5 = cv2.Sobel(image3, cv2.CV_8UC1, 0, 1, ksize=5) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image_X", im3) # x - cv2.imshow("Result_Image_Y", im4) # y - cv2.imshow("Result_Gradient", im5) # gradient - cv2.waitKey(0) - if s == 9: - image2 = image1.copy() - image3 = cv2.cvtColor(image2, cv2.COLOR_RGB2GRAY) - image3 = cv2.GaussianBlur(image3, (3, 3), 0) - im3 = cv2.Laplacian(image3, cv2.CV_64F) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", im3) # x - cv2.waitKey(0) - if s == 10: - image2 = image1.copy() - image3 = cv2.cvtColor(image2, cv2.COLOR_RGB2GRAY) - image3 = cv2.blur(image2, (5, 5)) - image3 = cv2.Canny(image3, 100, 100) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", image3) # x - cv2.waitKey(0) - if s == 11: - image2 = image1.copy() - color = ('b', 'g', 'r') - cv2.imshow("Image_load", image1) - for i, col in enumerate(color): - histr = cv2.calcHist([image2], [i], None, [256], [0, 256]) - plt.plot(histr, color=col) - plt.xlim([0, 256]) - plt.show() - plt.close() - cv2.waitKey(0) - if s == 12: - image2 = image1.copy() - image2 = cv2.cvtColor(image2, cv2.COLOR_RGB2GRAY) - image2 = cv2.equalizeHist(image2) - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", image2) - cv2.waitKey(0) - if s == 13: - cv2.imshow("Image_load", image1) - cv2.imshow("Result_Image", image2) - cv2.imwrite("D:\\im1.jpg", image1) - cv2.imwrite("D:\\im2.jpg", image2) - cv2.waitKey(0) - if s == 14: - image2 = image1.copy() - cv2.imshow("Image_load", image1) - image2 = cv2.line(image2, (15, 15), (270, 270), (76, 187, 23), 10) # линия - image2 = cv2.rectangle(image2, (20, 20), (100, 100), (0, 0, 255), 10) # нарисуем четырехугольник - image2 = cv2.circle(image2, (100, 100), 40, (0, 255, 0), 10) # нарисуем круг - cv2.imshow("Result_Image", image2) - image1 = image2 - cv2.waitKey(0) - if s == 15: - cv2.imwrite("1.jpg", im) - cv2.imwrite("2.jpg", image1) - img = cv2.imread("1.jpg") - mask = cv2.imread("2.jpg", 0) - res = cv2.bitwise_and(img, img, mask=mask) - image2 = res.copy() - image1 = res.copy() - cv2.imshow("Result_Image", res) + cmd = input(">> ") + if cmd == "": + continue + elif cmd == "?": + print_help() + else: + if cmd in functions_list: + try: + functions_list[cmd]["func"](image=image1.copy()) + cv2.waitKey(0) + cv2.destroyAllWindows() + except Exception: + print("Произошла ошибка при выполнении функции") + traceback.print_exc() + else: + print("Функция не найдена! введите '?' для получения справки") - cv2.waitKey(0) - os.remove("1.jpg") - os.remove("2.jpg") - if s == 16: - cv2.destroyAllWindows() - sys.exit(0) - except ValueError: - print("Неверный пункт меню!!!! Выберите другое!") + except Exception: + traceback.print_exc() if __name__ == "__main__": diff --git a/lab2_1/test.jpg b/lab2_1/test.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcdc6cc33edafe00e74c7c4a010a770d7a706b74 GIT binary patch literal 112500 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

=AngKD<37Xx+kY6;H72+q7=F9_@GcOamIDg)Q= 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 E4})wn@c;k- literal 0 HcmV?d00001 diff --git a/lab2_2/lab2_2.py b/lab2_2/lab2_2.py index 4326d71..6ade2e2 100644 --- a/lab2_2/lab2_2.py +++ b/lab2_2/lab2_2.py @@ -1,13 +1,17 @@ import sys import cv2 -import numpy +import numpy from PyQt5.QtGui import QImage, QPixmap -from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog,QComboBox,QMessageBox +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() @@ -22,11 +26,10 @@ class Example(QWidget): btn_procesar = QPushButton('Сохранить изображение') btn_procesar.clicked.connect(self.saveImage) - - f=open("Operate.txt","r") - attr=f.read().splitlines() + f = open("Operate.txt", "r") + attr = f.read().splitlines() f.close() - self.oper=QComboBox() + self.oper = QComboBox() self.oper.addItems(attr) self.oper.currentIndexChanged.connect(self.combobox) @@ -43,25 +46,21 @@ class Example(QWidget): self.show() def openImage(self): - self.filename, _ = QFileDialog.getOpenFileName(None, 'Buscar Imagen', '.', 'Image Files (*.png *.jpg *.jpeg *.bmp)') + 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.image = cv2.imdecode(data, cv2.IMREAD_UNCHANGED) self.mostrarImagen(self.image) - self.image2=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) - + filename = QFileDialog.getSaveFileName(self, "QFileDialog.getSaveFileName()", "", "Image Files (*.jpg)") + img = self.image2 + cv2.imwrite(filename[0], img) - - def mostrarImagen(self,s): + def mostrarImagen(self, s): size = s.shape step = s.size / size[0] qformat = QImage.Format_Indexed8 @@ -74,198 +73,193 @@ class Example(QWidget): img = img.rgbSwapped() self.label.setPixmap(QPixmap.fromImage(img)) self.resize(self.label.pixmap().size()) - - def combobox(self, index): - if index==0: + def combobox(self, index): + if index == 0: self.i0() - if index==1: + if index == 1: self.i1() - if index==2: + if index == 2: self.i2() - if index==3: + if index == 3: self.i3() - if index==4: + if index == 4: self.i4() - if index==5: + if index == 5: self.i5() - if index==6: + if index == 6: self.i6() - if index==7: + if index == 7: self.i7() - if index==8: + if index == 8: self.i8() - if index==9: + if index == 9: self.i9() - if index==10: + if index == 10: self.i10() - if index==11: + if index == 11: self.i11() - if index==12: + if index == 12: self.i12() - if index==13: + if index == 13: self.i13() - if index==14: + if index == 14: self.i14() - if index==15: + if index == 15: self.i15() - if index==16: + if index == 16: self.i16() - if index==17: + if index == 17: self.i17() - if index==18: + if index == 18: self.i18() - if index==19: + if index == 19: self.i19() - if index==20: + if index == 20: self.i20() - def i0(self): - self.image2=self.image + 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.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.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.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.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 = 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 = 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.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.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.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.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.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.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.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.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.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 = 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]) + 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 = 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.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.image = cv2.imdecode(data, cv2.IMREAD_UNCHANGED) self.mostrarImagen(self.image) self.mostrarImagen(self.image) - self.image2=self.image + self.image2 = self.image def closeEvent(self, event): - close = QMessageBox.question(self,"Выход","Вы хотите завершить работу?",QMessageBox.Yes | QMessageBox.No) + 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_()) \ No newline at end of file + sys.exit(app.exec_()) diff --git a/lab4/lab4.py b/lab4/lab4.py index 4131c40..6c92bd1 100644 --- a/lab4/lab4.py +++ b/lab4/lab4.py @@ -1,32 +1,22 @@ -#import numpy as np -#import cv2 -#img = cv2.imread("D:\MACH\LAB_4\crocodile\image_0001.jpg") -#gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) -#sift = cv2.SIFT_create() -#kp = sift.detect(gray,None) -#img=cv2.drawKeypoints(gray,kp,img) -#cv2.imshow("R",img) -#cv2.waitKey(0) -#cv2.destroyAllWindows() +import random import sys import cv2 import numpy as np import random import math +from PyQt5.QtCore import Qt from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score from PyQt5.QtGui import QImage, QPixmap from PyQt5.QtWidgets import (QWidget, QApplication, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog,QComboBox,QMessageBox,QTextBrowser) -from PyQt5.QtCore import Qt + + class Example(QWidget): def __init__(self): super().__init__() self.image = None self.textbrowser = QTextBrowser() - self.initUI() - - def initUI(self): self.btn_open = QPushButton('Изображения folder1') self.btn_open.clicked.connect(self.openImages1) @@ -34,11 +24,9 @@ class Example(QWidget): self.btn_open1 = QPushButton('Изображения folder2') self.btn_open1.clicked.connect(self.openImages2) - self.btn_ = QPushButton('Обучить и создать матрицы') self.btn_.clicked.connect(self.matrix_and_train) - self.btn1 = QPushButton('Детектировать тестовые изображения') self.btn1.clicked.connect(self.detect_image) @@ -49,7 +37,6 @@ class Example(QWidget): self.btn1.setVisible(False) self.btn2.setVisible(False) - top_bar = QHBoxLayout() top_bar.addWidget(self.btn_open) top_bar.addWidget(self.btn_open1) @@ -59,156 +46,159 @@ class Example(QWidget): root = QVBoxLayout(self) root.addLayout(top_bar) root.addWidget(self.textbrowser) - - self.spisok=list() - self.spisok2=list() - self.spisok3=list() + self.spisok = list() + self.spisok2 = list() + self.spisok3 = list() - self.train=list() - self.matrix=list() + self.train = list() + self.matrix = list() self.resize(540, 574) self.setWindowTitle('ST_4') self.show() def openImages1(self): - filenames1 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.', 'Image Files (*.png *.jpg *.jpeg *.bmp)') - lk=filenames1[0] - self.erroropened(lk,"1") - self.mass(lk,1) + filenames1 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.', + 'Image Files (*.png *.jpg *.jpeg *.bmp)') + lk = filenames1[0] + self.erroropened(lk, "1") + self.mass(lk, 1) lk.clear() - def openImages2(self): - filenames2 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.', 'Image Files (*.png *.jpg *.jpeg *.bmp)') - lk=filenames2[0] - self.erroropened(lk,"2") - self.mass(lk,2) + filenames2 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.', + 'Image Files (*.png *.jpg *.jpeg *.bmp)') + lk = filenames2[0] + self.erroropened(lk, "2") + self.mass(lk, 2) lk.clear() - - def erroropened(self,s,s1): - if len(s)!=0: - q=QMessageBox.information(self,"Информация","Изображения из "+s1+" папки получены!") + + def erroropened(self, s, s1): + if len(s) != 0: + q = QMessageBox.information(self, "Информация", "Изображения из " + s1 + " папки получены!") else: - q=QMessageBox.information(self,"Информация","Вы не выбрали изображения!") + q = QMessageBox.information(self, "Информация", "Вы не выбрали изображения!") - - def mass(self,p,s1): - if s1==1: + def mass(self, p, s1): + if s1 == 1: self.spisok3.clear() for v in range(len(p)): self.spisok.append(str(p[v])) - self.spisok3.append(str(p[v])+"SKT") - self.appendos("Тестовый набор картинок",self.spisok) - if s1==2: + self.spisok3.append(str(p[v]) + "SKT") + self.appendos("Тестовый набор картинок", self.spisok) + if s1 == 2: for v in range(len(p)): self.spisok2.append(str(p[v])) - self.spisok3.append(str(p[v])+"NO") - self.spisok3=list(set(self.spisok3)) - self.appendos("Набор картинок для тренировки",self.spisok2) + self.spisok3.append(str(p[v]) + "NO") + self.spisok3 = list(set(self.spisok3)) + self.appendos("Набор картинок для тренировки", self.spisok2) self.btn_open.setVisible(False) self.btn_open1.setVisible(False) self.btn_.setVisible(True) - q=QMessageBox.information(self,"Информация","Количество изображений тестовой категории: "+str(len(self.spisok))+"\nКоличество изображений основной категории: "+str(len(self.spisok2))+"\nОбщее количество изображений: "+str(int(len(self.spisok)+int(len(self.spisok2))))) - + q = QMessageBox.information(self, "Информация", "Количество изображений тестовой категории: " + str( + len(self.spisok)) + "\nКоличество изображений основной категории: " + str( + len(self.spisok2)) + "\nОбщее количество изображений: " + str( + int(len(self.spisok) + int(len(self.spisok2))))) + def matrix_and_train(self): for v in range(len(self.spisok3)): - s=str(self.spisok3[v]) + s = str(self.spisok3[v]) if s.endswith("SKT"): - self.train.append(round(float(0.5),1)) - self.matrix.append(round(float(1.0),1)) + self.train.append(round(float(0.5), 1)) + self.matrix.append(round(float(1.0), 1)) if s.endswith("NO"): - q=round(float(random.uniform(1.0,3.0)),1) + q = round(float(random.uniform(1.0, 3.0)), 1) self.train.append(q) - self.matrix.append(round(float(-1.0),1)) - - self.appendos("Ваши тренировочные данные",self.train) - self.appendos("Ваша матрица",self.matrix) - train=np.array([self.train],dtype=int) - labels = np.array(self.matrix,dtype=int) + self.matrix.append(round(float(-1.0), 1)) + + self.appendos("Ваши тренировочные данные", self.train) + self.appendos("Ваша матрица", self.matrix) + train = np.array([self.train], dtype=int) + labels = np.array(self.matrix, dtype=int) self.svm = cv2.ml.SVM_create() self.svm.train(train, cv2.ml.COL_SAMPLE, labels) self.svm.save("1.yml") self.textbrowser.append("Модель сохранена!") - close = QMessageBox.question(self,"Поздравляем!","Ваша модель натренирована!",QMessageBox.Yes | QMessageBox.No) + close = QMessageBox.question(self, "Поздравляем!", "Ваша модель натренирована!", + QMessageBox.Yes | QMessageBox.No) if close == QMessageBox.Yes: pass self.btn_.setVisible(False) self.btn1.setVisible(True) - def appendos(self,s1,s2): + def appendos(self, s1, s2): self.textbrowser.append(s1) for v in range(len(s2)): self.textbrowser.append(str(s2[v])) def detect_image(self): - self.model = RandomForestClassifier(n_estimators=100,bootstrap = True,max_features = 'sqrt') + self.model = RandomForestClassifier(n_estimators=100, bootstrap=True, max_features='sqrt') self.spisok3.clear() for v in range(len(self.spisok)): - lkst=list() + lkst = list() img = cv2.imread(str(self.spisok[v])) - gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) + gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) sift = cv2.SIFT_create() - kp = sift.detect(gray,None) + kp = sift.detect(gray, None) for keyPoint in kp: - #self.spisok3.append(keyPoint.pt[0]) - #self.spisok3.append(keyPoint.pt[1]) - #print(keyPoint.pt[0]) - #print(keyPoint.pt[1]) + # self.spisok3.append(keyPoint.pt[0]) + # self.spisok3.append(keyPoint.pt[1]) + # print(keyPoint.pt[0]) + # print(keyPoint.pt[1]) lkst.append(keyPoint.pt[0]) lkst.append(keyPoint.pt[1]) - - #self.spisok3.append(lkst) - train=np.array([lkst],dtype=int) - labels = np.array([lkst],dtype=int) + + # self.spisok3.append(lkst) + train = np.array([lkst], dtype=int) + labels = np.array([lkst], dtype=int) self.model.fit(train, labels) - self.textbrowser.append("Модель натренирована на рисунке "+str(v)) - #print(len(self.spisok3)) + self.textbrowser.append("Модель натренирована на рисунке " + str(v)) + # print(len(self.spisok3)) self.textbrowser.append("Выявлены контурные точки на тестовых изображениях!") - - #s = keyPoint.size - #print(x,y,s) + + # s = keyPoint.size + # print(x,y,s) self.btn1.setVisible(False) self.btn2.setVisible(True) def form_les_and_train(self): - - #print(self.spisok3) + + # print(self.spisok3) for v in range(len(self.spisok2)): - lk=list() + lkst = list() img = cv2.imread(str(self.spisok2[v])) - gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) + gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) sift = cv2.SIFT_create() - kp = sift.detect(gray,None) + kp = sift.detect(gray, None) for keyPoint in kp: - #self.spisok3.append(keyPoint.pt[0]) - #self.spisok3.append(keyPoint.pt[1]) - #print(keyPoint.pt[0]) - #print(keyPoint.pt[1]) + # self.spisok3.append(keyPoint.pt[0]) + # self.spisok3.append(keyPoint.pt[1]) + # print(keyPoint.pt[0]) + # print(keyPoint.pt[1]) lkst.append(keyPoint.pt[0]) lkst.append(keyPoint.pt[1]) - train =np.array([lkst],dtype=int) + train = np.array([lkst], dtype=int) self.model.predict(train) - #self.model. + # self.model. print("RED") - #train = np.array([self.spisok3],dtype=int) - #labels = np.array([self.spisok3],dtype=int) - #model = RandomForestClassifier(n_estimators=100,bootstrap = True,max_features = 'sqrt') - #model.fit(train, labels) - #tree = DecisionTreeClassifier() - #tree.fit(self.spisok3, self.spisok3) - #accuracy = accuracy_score(len(self.spisok3), len(self.spisok3)) - #print('Model Accuracy:',accuracy) - + # train = np.array([self.spisok3],dtype=int) + # labels = np.array([self.spisok3],dtype=int) + # model = RandomForestClassifier(n_estimators=100,bootstrap = True,max_features = 'sqrt') + # model.fit(train, labels) + # tree = DecisionTreeClassifier() + # tree.fit(self.spisok3, self.spisok3) + # accuracy = accuracy_score(len(self.spisok3), len(self.spisok3)) + # print('Model Accuracy:',accuracy) def closeEvent(self, event): - close = QMessageBox.question(self,"Выход","Вы хотите завершить работу?",QMessageBox.Yes | QMessageBox.No) + 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_()) \ No newline at end of file + sys.exit(app.exec_())