refactoring

This commit is contained in:
vlad 2022-11-24 10:52:38 +03:00
parent c567ba6273
commit c6e36a2f72
4 changed files with 352 additions and 367 deletions

View File

@ -1,161 +1,162 @@
import os import os
import sys import sys
import traceback
import cv2 import cv2
import numpy as np import numpy as np
from matplotlib import pyplot as plt from matplotlib import pyplot as plt
def menu(): SOURCE_IMAGE = "test.jpg"
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") 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(): def main():
image1 = cv2.imread("D:\\MACH\\LAB_2\\image0.jpg") image1 = cv2.imread(SOURCE_IMAGE)
image2 = image1.copy()
im = image1.copy()
while True: while True:
menu()
try: try:
s = int(input()) cmd = input(">> ")
if s == 1: if cmd == "":
image2 = image1.copy() continue
kernel = np.array([[-0.1, 0.2, -0.1], [0.2, 3.0, 0.2], [-0.1, 0.2, -0.1]]) elif cmd == "?":
image2 = cv2.filter2D(image2, -1, kernel) print_help()
cv2.imshow("Image_load", image1) else:
cv2.imshow("Result_Image", image2) if cmd in functions_list:
cv2.waitKey(0) try:
if s == 2: functions_list[cmd]["func"](image=image1.copy())
image2 = image1.copy() cv2.waitKey(0)
image2 = cv2.blur(image2, (5, 5)) cv2.destroyAllWindows()
cv2.imshow("Image_load", image1) except Exception:
cv2.imshow("Result_Image", image2) print("Произошла ошибка при выполнении функции")
cv2.waitKey(0) traceback.print_exc()
if s == 3: else:
image2 = image1.copy() print("Функция не найдена! введите '?' для получения справки")
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)
cv2.waitKey(0) except Exception:
os.remove("1.jpg") traceback.print_exc()
os.remove("2.jpg")
if s == 16:
cv2.destroyAllWindows()
sys.exit(0)
except ValueError:
print("Неверный пункт меню!!!! Выберите другое!")
if __name__ == "__main__": if __name__ == "__main__":

BIN
lab2_1/test.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

View File

@ -2,12 +2,16 @@ import sys
import cv2 import cv2
import numpy import numpy
from PyQt5.QtGui import QImage, QPixmap 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 PyQt5.QtCore import Qt
from matplotlib import pyplot as plt from matplotlib import pyplot as plt
class Example(QWidget): class Example(QWidget):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.image2 = None
self.image = None self.image = None
self.label = QLabel() self.label = QLabel()
self.initUI() self.initUI()
@ -22,11 +26,10 @@ class Example(QWidget):
btn_procesar = QPushButton('Сохранить изображение') btn_procesar = QPushButton('Сохранить изображение')
btn_procesar.clicked.connect(self.saveImage) btn_procesar.clicked.connect(self.saveImage)
f = open("Operate.txt", "r")
f=open("Operate.txt","r") attr = f.read().splitlines()
attr=f.read().splitlines()
f.close() f.close()
self.oper=QComboBox() self.oper = QComboBox()
self.oper.addItems(attr) self.oper.addItems(attr)
self.oper.currentIndexChanged.connect(self.combobox) self.oper.currentIndexChanged.connect(self.combobox)
@ -43,25 +46,21 @@ class Example(QWidget):
self.show() self.show()
def openImage(self): 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: if self.filename:
with open(self.filename, "rb") as file: with open(self.filename, "rb") as file:
data = numpy.array(bytearray(file.read())) 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 saveImage(self): def saveImage(self):
filename = QFileDialog.getSaveFileName(self,"QFileDialog.getSaveFileName()","","Image Files (*.jpg)") filename = QFileDialog.getSaveFileName(self, "QFileDialog.getSaveFileName()", "", "Image Files (*.jpg)")
img=self.image2 img = self.image2
cv2.imwrite(filename[0],img) cv2.imwrite(filename[0], img)
def mostrarImagen(self, s):
def mostrarImagen(self,s):
size = s.shape size = s.shape
step = s.size / size[0] step = s.size / size[0]
qformat = QImage.Format_Indexed8 qformat = QImage.Format_Indexed8
@ -75,178 +74,172 @@ class Example(QWidget):
self.label.setPixmap(QPixmap.fromImage(img)) self.label.setPixmap(QPixmap.fromImage(img))
self.resize(self.label.pixmap().size()) self.resize(self.label.pixmap().size())
def combobox(self, index): def combobox(self, index):
if index==0: if index == 0:
self.i0() self.i0()
if index==1: if index == 1:
self.i1() self.i1()
if index==2: if index == 2:
self.i2() self.i2()
if index==3: if index == 3:
self.i3() self.i3()
if index==4: if index == 4:
self.i4() self.i4()
if index==5: if index == 5:
self.i5() self.i5()
if index==6: if index == 6:
self.i6() self.i6()
if index==7: if index == 7:
self.i7() self.i7()
if index==8: if index == 8:
self.i8() self.i8()
if index==9: if index == 9:
self.i9() self.i9()
if index==10: if index == 10:
self.i10() self.i10()
if index==11: if index == 11:
self.i11() self.i11()
if index==12: if index == 12:
self.i12() self.i12()
if index==13: if index == 13:
self.i13() self.i13()
if index==14: if index == 14:
self.i14() self.i14()
if index==15: if index == 15:
self.i15() self.i15()
if index==16: if index == 16:
self.i16() self.i16()
if index==17: if index == 17:
self.i17() self.i17()
if index==18: if index == 18:
self.i18() self.i18()
if index==19: if index == 19:
self.i19() self.i19()
if index==20: if index == 20:
self.i20() self.i20()
def i0(self): def i0(self):
self.image2=self.image self.image2 = self.image
self.mostrarImagen(self.image) self.mostrarImagen(self.image)
def i1(self): def i1(self):
self.image2=self.image 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]]) 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 = cv2.filter2D(self.image2, -1, kernel)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i2(self): def i2(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.blur(self.image2,(5,5)) self.image2 = cv2.blur(self.image2, (5, 5))
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i3(self): def i3(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.medianBlur(self.image2,5) self.image2 = cv2.medianBlur(self.image2, 5)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i4(self): def i4(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.GaussianBlur(self.image2, (9,9),cv2.BORDER_DEFAULT) self.image2 = cv2.GaussianBlur(self.image2, (9, 9), cv2.BORDER_DEFAULT)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i5(self): def i5(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.erode(self.image2, numpy.ones((11, 11))) self.image2 = cv2.erode(self.image2, numpy.ones((11, 11)))
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i6(self): def i6(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.dilate(self.image2, numpy.ones((11, 11))) self.image2 = cv2.dilate(self.image2, numpy.ones((11, 11)))
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i7(self): def i7(self):
self.image2=self.image self.image2 = self.image
kernel = numpy.ones((6,6),numpy.uint8) kernel = numpy.ones((6, 6), numpy.uint8)
self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_OPEN, kernel,iterations = 1) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_OPEN, kernel, iterations=1)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i8(self): def i8(self):
self.image2=self.image self.image2 = self.image
kernel = numpy.ones((6,6),numpy.uint8) kernel = numpy.ones((6, 6), numpy.uint8)
self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_CLOSE, kernel,iterations = 1) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_CLOSE, kernel, iterations=1)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i9(self): def i9(self):
self.image2=self.image self.image2 = self.image
kernel = numpy.ones((6,6),numpy.uint8) kernel = numpy.ones((6, 6), numpy.uint8)
self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_GRADIENT, kernel,iterations = 1) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_GRADIENT, kernel, iterations=1)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i10(self): def i10(self):
self.image2=self.image self.image2 = self.image
kernel = numpy.ones((6,6),numpy.uint8) kernel = numpy.ones((6, 6), numpy.uint8)
self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_TOPHAT, kernel,iterations = 1) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_TOPHAT, kernel, iterations=1)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i11(self): def i11(self):
self.image2=self.image self.image2 = self.image
kernel = numpy.ones((6,6),numpy.uint8) kernel = numpy.ones((6, 6), numpy.uint8)
self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_BLACKHAT, kernel,iterations = 1) self.image2 = cv2.morphologyEx(self.image2, cv2.MORPH_BLACKHAT, kernel, iterations=1)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i12(self): def i12(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_BGR2GRAY) self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_BGR2GRAY)
self.image2 = cv2.GaussianBlur(self.image2,(3,3),0) self.image2 = cv2.GaussianBlur(self.image2, (3, 3), 0)
self.image2 = cv2.Sobel(self.image2,cv2.CV_64F,1,0,ksize=5) self.image2 = cv2.Sobel(self.image2, cv2.CV_64F, 1, 0, ksize=5)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i13(self): def i13(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_BGR2GRAY) self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_BGR2GRAY)
self.image2 = cv2.GaussianBlur(self.image2,(3,3),0) self.image2 = cv2.GaussianBlur(self.image2, (3, 3), 0)
self.image2 = cv2.Sobel(self.image2,cv2.CV_64F,0,1,ksize=5) self.image2 = cv2.Sobel(self.image2, cv2.CV_64F, 0, 1, ksize=5)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i14(self): def i14(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_BGR2GRAY) self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_BGR2GRAY)
self.image2 = cv2.GaussianBlur(self.image2,(3,3),0) self.image2 = cv2.GaussianBlur(self.image2, (3, 3), 0)
self.image2 = cv2.Sobel(self.image2,cv2.CV_8UC1,0,1,ksize=5) self.image2 = cv2.Sobel(self.image2, cv2.CV_8UC1, 0, 1, ksize=5)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i15(self): def i15(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_RGB2GRAY) self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_RGB2GRAY)
self.image2 = cv2.GaussianBlur(self.image2,(3,3),0) self.image2 = cv2.GaussianBlur(self.image2, (3, 3), 0)
self.image2 = cv2.Laplacian(self.image2,cv2.CV_64F) self.image2 = cv2.Laplacian(self.image2, cv2.CV_64F)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i16(self): def i16(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_RGB2GRAY) self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_RGB2GRAY)
self.image2 = cv2.blur(self.image2,(5,5)) self.image2 = cv2.blur(self.image2, (5, 5))
self.image2 = cv2.Canny(self.image2, 100, 100) self.image2 = cv2.Canny(self.image2, 100, 100)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i17(self): def i17(self):
self.image2=self.image self.image2 = self.image
color = ('b','g','r') color = ('b', 'g', 'r')
for i,col in enumerate(color): for i, col in enumerate(color):
histr = cv2.calcHist([self.image2],[i],None,[256],[0,256]) histr = cv2.calcHist([self.image2], [i], None, [256], [0, 256])
plt.plot(histr,color = col) plt.plot(histr, color=col)
plt.xlim([0,256]) plt.xlim([0, 256])
plt.show() plt.show()
def i18(self): def i18(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_RGB2GRAY) self.image2 = cv2.cvtColor(self.image2, cv2.COLOR_RGB2GRAY)
self.image2 = cv2.equalizeHist(self.image2) self.image2 = cv2.equalizeHist(self.image2)
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i19(self): def i19(self):
self.image2=self.image self.image2 = self.image
self.image2 = cv2.line(self.image2,(15,15),(270,270),(76,187,23),10)#линия 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.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.image2 = cv2.circle(self.image2, (100, 100), 40, (0, 255, 0), 10) # нарисуем круг
self.image=self.image2 self.image = self.image2
self.mostrarImagen(self.image2) self.mostrarImagen(self.image2)
def i20(self): def i20(self):
@ -256,15 +249,16 @@ class Example(QWidget):
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.mostrarImagen(self.image) self.mostrarImagen(self.image)
self.image2=self.image self.image2 = self.image
def closeEvent(self, event): def closeEvent(self, event):
close = QMessageBox.question(self,"Выход","Вы хотите завершить работу?",QMessageBox.Yes | QMessageBox.No) close = QMessageBox.question(self, "Выход", "Вы хотите завершить работу?", QMessageBox.Yes | QMessageBox.No)
if close == QMessageBox.Yes: if close == QMessageBox.Yes:
event.accept() event.accept()
else: else:
event.ignore() event.ignore()
if __name__ == '__main__': if __name__ == '__main__':
app = QApplication(sys.argv) app = QApplication(sys.argv)
win = Example() win = Example()

View File

@ -1,32 +1,22 @@
#import numpy as np import random
#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 sys import sys
import cv2 import cv2
import numpy as np import numpy as np
import random import random
import math import math
from PyQt5.QtCore import Qt
from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score from sklearn.metrics import accuracy_score
from PyQt5.QtGui import QImage, QPixmap from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import (QWidget, QApplication, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, from PyQt5.QtWidgets import (QWidget, QApplication, QLabel, QVBoxLayout, QHBoxLayout, QPushButton,
QFileDialog,QComboBox,QMessageBox,QTextBrowser) QFileDialog,QComboBox,QMessageBox,QTextBrowser)
from PyQt5.QtCore import Qt
class Example(QWidget): class Example(QWidget):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.image = None self.image = None
self.textbrowser = QTextBrowser() self.textbrowser = QTextBrowser()
self.initUI()
def initUI(self):
self.btn_open = QPushButton('Изображения folder1') self.btn_open = QPushButton('Изображения folder1')
self.btn_open.clicked.connect(self.openImages1) self.btn_open.clicked.connect(self.openImages1)
@ -34,11 +24,9 @@ class Example(QWidget):
self.btn_open1 = QPushButton('Изображения folder2') self.btn_open1 = QPushButton('Изображения folder2')
self.btn_open1.clicked.connect(self.openImages2) self.btn_open1.clicked.connect(self.openImages2)
self.btn_ = QPushButton('Обучить и создать матрицы') self.btn_ = QPushButton('Обучить и создать матрицы')
self.btn_.clicked.connect(self.matrix_and_train) self.btn_.clicked.connect(self.matrix_and_train)
self.btn1 = QPushButton('Детектировать тестовые изображения') self.btn1 = QPushButton('Детектировать тестовые изображения')
self.btn1.clicked.connect(self.detect_image) self.btn1.clicked.connect(self.detect_image)
@ -49,7 +37,6 @@ class Example(QWidget):
self.btn1.setVisible(False) self.btn1.setVisible(False)
self.btn2.setVisible(False) self.btn2.setVisible(False)
top_bar = QHBoxLayout() top_bar = QHBoxLayout()
top_bar.addWidget(self.btn_open) top_bar.addWidget(self.btn_open)
top_bar.addWidget(self.btn_open1) top_bar.addWidget(self.btn_open1)
@ -60,154 +47,157 @@ class Example(QWidget):
root.addLayout(top_bar) root.addLayout(top_bar)
root.addWidget(self.textbrowser) root.addWidget(self.textbrowser)
self.spisok=list() self.spisok = list()
self.spisok2=list() self.spisok2 = list()
self.spisok3=list() self.spisok3 = list()
self.train = list()
self.train=list() self.matrix = list()
self.matrix=list()
self.resize(540, 574) self.resize(540, 574)
self.setWindowTitle('ST_4') self.setWindowTitle('ST_4')
self.show() self.show()
def openImages1(self): def openImages1(self):
filenames1 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.', 'Image Files (*.png *.jpg *.jpeg *.bmp)') filenames1 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.',
lk=filenames1[0] 'Image Files (*.png *.jpg *.jpeg *.bmp)')
self.erroropened(lk,"1") lk = filenames1[0]
self.mass(lk,1) self.erroropened(lk, "1")
self.mass(lk, 1)
lk.clear() lk.clear()
def openImages2(self): def openImages2(self):
filenames2 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.', 'Image Files (*.png *.jpg *.jpeg *.bmp)') filenames2 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.',
lk=filenames2[0] 'Image Files (*.png *.jpg *.jpeg *.bmp)')
self.erroropened(lk,"2") lk = filenames2[0]
self.mass(lk,2) self.erroropened(lk, "2")
self.mass(lk, 2)
lk.clear() lk.clear()
def erroropened(self,s,s1): def erroropened(self, s, s1):
if len(s)!=0: if len(s) != 0:
q=QMessageBox.information(self,"Информация","Изображения из "+s1+" папки получены!") q = QMessageBox.information(self, "Информация", "Изображения из " + s1 + " папки получены!")
else: else:
q=QMessageBox.information(self,"Информация","Вы не выбрали изображения!") q = QMessageBox.information(self, "Информация", "Вы не выбрали изображения!")
def mass(self, p, s1):
def mass(self,p,s1): if s1 == 1:
if s1==1:
self.spisok3.clear() self.spisok3.clear()
for v in range(len(p)): for v in range(len(p)):
self.spisok.append(str(p[v])) self.spisok.append(str(p[v]))
self.spisok3.append(str(p[v])+"SKT") self.spisok3.append(str(p[v]) + "SKT")
self.appendos("Тестовый набор картинок",self.spisok) self.appendos("Тестовый набор картинок", self.spisok)
if s1==2: if s1 == 2:
for v in range(len(p)): for v in range(len(p)):
self.spisok2.append(str(p[v])) self.spisok2.append(str(p[v]))
self.spisok3.append(str(p[v])+"NO") self.spisok3.append(str(p[v]) + "NO")
self.spisok3=list(set(self.spisok3)) self.spisok3 = list(set(self.spisok3))
self.appendos("Набор картинок для тренировки",self.spisok2) self.appendos("Набор картинок для тренировки", self.spisok2)
self.btn_open.setVisible(False) self.btn_open.setVisible(False)
self.btn_open1.setVisible(False) self.btn_open1.setVisible(False)
self.btn_.setVisible(True) 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): def matrix_and_train(self):
for v in range(len(self.spisok3)): for v in range(len(self.spisok3)):
s=str(self.spisok3[v]) s = str(self.spisok3[v])
if s.endswith("SKT"): if s.endswith("SKT"):
self.train.append(round(float(0.5),1)) self.train.append(round(float(0.5), 1))
self.matrix.append(round(float(1.0),1)) self.matrix.append(round(float(1.0), 1))
if s.endswith("NO"): 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.train.append(q)
self.matrix.append(round(float(-1.0),1)) self.matrix.append(round(float(-1.0), 1))
self.appendos("Ваши тренировочные данные",self.train) self.appendos("Ваши тренировочные данные", self.train)
self.appendos("Ваша матрица",self.matrix) self.appendos("Ваша матрица", self.matrix)
train=np.array([self.train],dtype=int) train = np.array([self.train], dtype=int)
labels = np.array(self.matrix,dtype=int) labels = np.array(self.matrix, dtype=int)
self.svm = cv2.ml.SVM_create() self.svm = cv2.ml.SVM_create()
self.svm.train(train, cv2.ml.COL_SAMPLE, labels) self.svm.train(train, cv2.ml.COL_SAMPLE, labels)
self.svm.save("1.yml") self.svm.save("1.yml")
self.textbrowser.append("Модель сохранена!") self.textbrowser.append("Модель сохранена!")
close = QMessageBox.question(self,"Поздравляем!","Ваша модель натренирована!",QMessageBox.Yes | QMessageBox.No) close = QMessageBox.question(self, "Поздравляем!", "Ваша модель натренирована!",
QMessageBox.Yes | QMessageBox.No)
if close == QMessageBox.Yes: if close == QMessageBox.Yes:
pass pass
self.btn_.setVisible(False) self.btn_.setVisible(False)
self.btn1.setVisible(True) self.btn1.setVisible(True)
def appendos(self,s1,s2): def appendos(self, s1, s2):
self.textbrowser.append(s1) self.textbrowser.append(s1)
for v in range(len(s2)): for v in range(len(s2)):
self.textbrowser.append(str(s2[v])) self.textbrowser.append(str(s2[v]))
def detect_image(self): 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() self.spisok3.clear()
for v in range(len(self.spisok)): for v in range(len(self.spisok)):
lkst=list() lkst = list()
img = cv2.imread(str(self.spisok[v])) 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() sift = cv2.SIFT_create()
kp = sift.detect(gray,None) kp = sift.detect(gray, None)
for keyPoint in kp: for keyPoint in kp:
#self.spisok3.append(keyPoint.pt[0]) # self.spisok3.append(keyPoint.pt[0])
#self.spisok3.append(keyPoint.pt[1]) # self.spisok3.append(keyPoint.pt[1])
#print(keyPoint.pt[0]) # print(keyPoint.pt[0])
#print(keyPoint.pt[1]) # print(keyPoint.pt[1])
lkst.append(keyPoint.pt[0]) lkst.append(keyPoint.pt[0])
lkst.append(keyPoint.pt[1]) lkst.append(keyPoint.pt[1])
#self.spisok3.append(lkst) # self.spisok3.append(lkst)
train=np.array([lkst],dtype=int) train = np.array([lkst], dtype=int)
labels = np.array([lkst],dtype=int) labels = np.array([lkst], dtype=int)
self.model.fit(train, labels) self.model.fit(train, labels)
self.textbrowser.append("Модель натренирована на рисунке "+str(v)) self.textbrowser.append("Модель натренирована на рисунке " + str(v))
#print(len(self.spisok3)) # print(len(self.spisok3))
self.textbrowser.append("Выявлены контурные точки на тестовых изображениях!") self.textbrowser.append("Выявлены контурные точки на тестовых изображениях!")
#s = keyPoint.size # s = keyPoint.size
#print(x,y,s) # print(x,y,s)
self.btn1.setVisible(False) self.btn1.setVisible(False)
self.btn2.setVisible(True) self.btn2.setVisible(True)
def form_les_and_train(self): def form_les_and_train(self):
#print(self.spisok3) # print(self.spisok3)
for v in range(len(self.spisok2)): for v in range(len(self.spisok2)):
lk=list() lkst = list()
img = cv2.imread(str(self.spisok2[v])) 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() sift = cv2.SIFT_create()
kp = sift.detect(gray,None) kp = sift.detect(gray, None)
for keyPoint in kp: for keyPoint in kp:
#self.spisok3.append(keyPoint.pt[0]) # self.spisok3.append(keyPoint.pt[0])
#self.spisok3.append(keyPoint.pt[1]) # self.spisok3.append(keyPoint.pt[1])
#print(keyPoint.pt[0]) # print(keyPoint.pt[0])
#print(keyPoint.pt[1]) # print(keyPoint.pt[1])
lkst.append(keyPoint.pt[0]) lkst.append(keyPoint.pt[0])
lkst.append(keyPoint.pt[1]) lkst.append(keyPoint.pt[1])
train =np.array([lkst],dtype=int) train = np.array([lkst], dtype=int)
self.model.predict(train) self.model.predict(train)
#self.model. # self.model.
print("RED") print("RED")
#train = np.array([self.spisok3],dtype=int) # train = np.array([self.spisok3],dtype=int)
#labels = np.array([self.spisok3],dtype=int) # labels = np.array([self.spisok3],dtype=int)
#model = RandomForestClassifier(n_estimators=100,bootstrap = True,max_features = 'sqrt') # model = RandomForestClassifier(n_estimators=100,bootstrap = True,max_features = 'sqrt')
#model.fit(train, labels) # model.fit(train, labels)
#tree = DecisionTreeClassifier() # tree = DecisionTreeClassifier()
#tree.fit(self.spisok3, self.spisok3) # tree.fit(self.spisok3, self.spisok3)
#accuracy = accuracy_score(len(self.spisok3), len(self.spisok3)) # accuracy = accuracy_score(len(self.spisok3), len(self.spisok3))
#print('Model Accuracy:',accuracy) # print('Model Accuracy:',accuracy)
def closeEvent(self, event): def closeEvent(self, event):
close = QMessageBox.question(self,"Выход","Вы хотите завершить работу?",QMessageBox.Yes | QMessageBox.No) close = QMessageBox.question(self, "Выход", "Вы хотите завершить работу?", QMessageBox.Yes | QMessageBox.No)
if close == QMessageBox.Yes: if close == QMessageBox.Yes:
event.accept() event.accept()
else: else:
event.ignore() event.ignore()
if __name__ == '__main__': if __name__ == '__main__':
app = QApplication(sys.argv) app = QApplication(sys.argv)
win = Example() win = Example()