Skip to content

Commit 25f7e8b

Browse files
committed
Padrão MVC
1 parent e399c9c commit 25f7e8b

8 files changed

Lines changed: 188 additions & 23 deletions

File tree

SRC/Controller/Controller.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1-
from ..Model.Model import case_original, case_gray
1+
from ..Model.Model import load_img, gray_color, binary_color, gaussian_filter, median_filter, canny_edge, laplace_edge, sobel_edge
22
from ..View.View import start_gui
33

44
start_gui()
5-
case_original()
6-
case_gray()
5+
load_img()
6+
gray_color()
7+
binary_color()
8+
gaussian_filter()
9+
median_filter()
10+
canny_edge()
11+
laplace_edge()
12+
sobel_edge()
433 Bytes
Binary file not shown.

SRC/Model/Model.py

Lines changed: 133 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,155 @@
11
import tkinter as tk
22
from tkinter import filedialog
3+
import numpy as np
34
import cv2
45

56
imgOrigin = None
67
img = None
7-
file_path = None
8+
imgPath = None
89

9-
def case_original():
10+
def load_img():
1011
# Abre a caixa de diálogo para seleção do arquivo
11-
global imgOrigin, img, file_path
12-
file_path = filedialog.askopenfilename()
13-
if file_path:
14-
img = cv2.imread(file_path)
12+
global imgOrigin, img, imgPath
13+
imgPath = filedialog.askopenfilename()
14+
if imgPath:
15+
img = cv2.imread(imgPath)
1516
if img is not None:
17+
print('Original')
1618
cv2.imshow('Original', img)
1719
cv2.waitKey(0)
1820
cv2.destroyAllWindows()
1921
else:
2022
print('Erro ao carregar a imagem')
21-
else:
22-
print('Nenhum arquivo selecionado')
23+
2324

24-
def case_gray():
25+
def gray_color():
2526
# Abre a caixa de diálogo para seleção do arquivo
26-
global imgOrigin, img, file_path
27-
file_path = filedialog.askopenfilename()
28-
if file_path:
29-
img = cv2.imread(file_path, cv2.IMREAD_GRAYSCALE)
27+
global imgOrigin, img, imgPath
28+
imgPath = filedialog.askopenfilename()
29+
if imgPath:
30+
img = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE)
3031
if img is not None:
31-
cv2.imshow('Cinza', img)
32+
print('Gray')
33+
cv2.imshow('Gray', img)
3234
cv2.waitKey(0)
3335
cv2.destroyAllWindows()
3436
else:
3537
print('Erro ao carregar a imagem')
36-
else:
37-
print('Nenhum arquivo selecionado')
38+
3839

40+
def binary_color():
41+
# Abre a caixa de diálogo para seleção do arquivo
42+
global imgOrigin, img, imgPath
43+
imgPath = filedialog.askopenfilename()
44+
if imgPath:
45+
img = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE)
46+
if img is not None:
47+
48+
threshold = 128
49+
50+
ret, binary = cv2.threshold(img, threshold, 255, cv2.THRESH_BINARY)
51+
52+
# Exibe a imagem binarizada
53+
print('Binary')
54+
cv2.imshow('Binário', binary)
55+
cv2.waitKey(0)
56+
cv2.destroyAllWindows()
57+
58+
59+
def gaussian_filter():
60+
# Abre a caixa de diálogo para seleção do arquivo
61+
global imgOrigin, img, imgPath
62+
imgPath = filedialog.askopenfilename()
63+
if imgPath:
64+
img = cv2.imread(imgPath)
65+
if img is not None:
66+
kernelSize = (3, 3)
67+
standardDeviation = 0
68+
gaussian = cv2.GaussianBlur(img, kernelSize, standardDeviation)
69+
70+
71+
print('Gaussiana')
72+
cv2.imshow('Gaussiana', gaussian)
73+
cv2.waitKey(0)
74+
cv2.destroyAllWindows()
75+
76+
77+
def median_filter():
78+
# Abre a caixa de diálogo para seleção do arquivo
79+
global imgOrigin, img, imgPath
80+
imgPath = filedialog.askopenfilename()
81+
if imgPath:
82+
img = cv2.imread(imgPath)
83+
if img is not None:
84+
median = cv2.medianBlur(img, 3)
85+
86+
print('Mediana')
87+
cv2.imshow('Mediana', median)
88+
cv2.waitKey(0)
89+
cv2.destroyAllWindows()
90+
91+
92+
def canny_edge():
93+
# Abre a caixa de diálogo para seleção do arquivo
94+
global imgOrigin, img, imgPath
95+
imgPath = filedialog.askopenfilename()
96+
if imgPath:
97+
img = cv2.imread(imgPath)
98+
if img is not None:
99+
img = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE)
100+
edges = cv2.Canny(img, 100, 200)
101+
102+
# Define uma máscara preenchida com zeros
103+
mask = np.zeros_like(img)
104+
105+
# Preenche a máscara com valores brancos nos locais das bordas detectadas
106+
mask[edges != 0] = 255
107+
108+
# Exibe a detecção de bordas Canny
109+
print('Canny')
110+
cv2.imshow('Canny', edges)
111+
cv2.waitKey(0)
112+
cv2.destroyAllWindows()
113+
114+
115+
def laplace_edge():
116+
# Abre a caixa de diálogo para seleção do arquivo
117+
global imgOrigin, img, imgPath
118+
imgPath = filedialog.askopenfilename()
119+
if imgPath:
120+
img = cv2.imread(imgPath)
121+
if img is not None:
122+
laplacian = cv2.Laplacian(img, cv2.CV_8U, ksize=3)
123+
124+
print('Laplacian')
125+
cv2.imshow('Laplacian', laplacian)
126+
cv2.waitKey(0)
127+
cv2.destroyAllWindows()
128+
129+
130+
def sobel_edge():
131+
# Abre a caixa de diálogo para seleção do arquivo
132+
global imgOrigin, img, imgPath
133+
imgPath = filedialog.askopenfilename()
134+
if imgPath:
135+
img = cv2.imread(imgPath)
136+
if img is not None:
137+
img = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE)
138+
139+
140+
sobelX = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
141+
sobelY = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
142+
143+
# Calcula a magnitude das derivadas
144+
sobelMag = np.sqrt(sobelX**2 + sobelY**2)
145+
146+
# Converte os valores para o intervalo de 0 a 255
147+
sobelMag = np.uint8(sobelMag)
148+
149+
# Exibe as imagens de saída
150+
print('Sobel')
151+
cv2.imshow('Sobel X', sobelX)
152+
cv2.imshow('Sobel Y', sobelY)
153+
cv2.imshow('Magnitude do Sobel', sobelMag)
154+
cv2.waitKey(0)
155+
cv2.destroyAllWindows()
4.97 KB
Binary file not shown.

SRC/View/View.py

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,60 @@
11
import tkinter as tk
2-
from ..Model.Model import case_original, case_gray
3-
2+
from ..Model.Model import load_img, gray_color, binary_color, gaussian_filter, median_filter, canny_edge, laplace_edge, sobel_edge
43

54
def start_gui():
65
# Cria a janela da interface gráfica
76
root = tk.Tk()
7+
root.geometry("800x500") # Define as dimensões
8+
root.title('Processamento de Imagem')
9+
# Cria o rótulo
10+
label = tk.Label(root, text="Opções de Processamento")
11+
label.grid(row=0, column=0)
12+
label.pack()
13+
814

915
# Cria o botão para exibir a imagem original
10-
button_original = tk.Button(root, text="Original", command=case_original)
16+
button_original = tk.Button(root, text="Original", command=load_img)
1117
button_original.pack()
1218

1319
# Cria o botão para exibir a imagem em escala de cinza
14-
button_gray = tk.Button(root, text="Cinza", command=case_gray)
20+
button_gray = tk.Button(root, text="Gray", command=gray_color)
1521
button_gray.pack()
1622

23+
# Cria o botão para exibir a imagem em
24+
button_binary = tk.Button(root, text="Binary", command=binary_color)
25+
button_binary.pack()
26+
27+
# Cria o botão para exibir a imagem em
28+
button_gaussian = tk.Button(root, text="Gaussian", command=gaussian_filter)
29+
button_gaussian.pack()
30+
31+
# Cria o botão para exibir a imagem em
32+
button_median = tk.Button(root, text="Median", command=median_filter)
33+
button_median.pack()
34+
35+
# Cria o botão para exibir a imagem em
36+
button_canny = tk.Button(root, text="Canny", command=canny_edge)
37+
button_canny.pack()
38+
39+
# Cria o botão para exibir a imagem em
40+
button_laplace = tk.Button(root, text="Laplace", command=laplace_edge)
41+
button_laplace.pack()
42+
43+
# Cria o botão para exibir a imagem em
44+
button_sobel = tk.Button(root, text="Sobel", command=sobel_edge)
45+
button_sobel.pack()
46+
47+
1748
# Inicia o loop da interface gráfica
1849
root.mainloop()
50+
51+
52+
53+
root.destroy()
54+
55+
# Define a ação a ser executada quando o usuário fecha a janela
56+
root.protocol("WM_DELETE_WINDOW")
57+
58+
59+
60+
643 Bytes
Binary file not shown.
749 Bytes
Binary file not shown.
1.8 KB
Binary file not shown.

0 commit comments

Comments
 (0)