Update app.py
Browse files
app.py
CHANGED
@@ -14,38 +14,71 @@ if uploaded_file is not None:
|
|
14 |
# Carregar a imagem com OpenCV
|
15 |
image = Image.open(uploaded_file)
|
16 |
image = np.array(image)
|
17 |
-
|
18 |
# Mostrar a imagem original
|
19 |
st.image(image, caption="Imagem Original", use_column_width=True)
|
20 |
-
|
21 |
# Opções de processamento
|
22 |
st.sidebar.header("Opções de Processamento")
|
23 |
process_option = st.sidebar.selectbox("Escolha o processamento:",
|
24 |
["Conversão para Escala de Cinza",
|
25 |
"Filtro de Borrão (Blur)",
|
26 |
"Detecção de Bordas (Canny)",
|
27 |
-
"Equalização de Histograma"
|
28 |
-
|
|
|
|
|
29 |
if process_option == "Conversão para Escala de Cinza":
|
30 |
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
31 |
st.image(gray_image, caption="Imagem em Escala de Cinza", use_column_width=True, channels="GRAY")
|
32 |
-
|
33 |
elif process_option == "Filtro de Borrão (Blur)":
|
34 |
-
|
|
|
35 |
st.image(blur_image, caption="Imagem com Filtro de Borrão", use_column_width=True)
|
36 |
-
|
37 |
elif process_option == "Detecção de Bordas (Canny)":
|
38 |
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
39 |
-
|
|
|
|
|
40 |
st.image(edges, caption="Bordas Detectadas", use_column_width=True, channels="GRAY")
|
41 |
-
|
42 |
elif process_option == "Equalização de Histograma":
|
43 |
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
44 |
equalized_image = cv2.equalizeHist(gray_image)
|
45 |
st.image(equalized_image, caption="Imagem com Histograma Equalizado", use_column_width=True, channels="GRAY")
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
# Botão para salvar o resultado
|
48 |
if st.button("Salvar Imagem Processada"):
|
49 |
result_path = "imagem_processada.png"
|
50 |
-
cv2.imwrite(result_path,
|
51 |
-
|
|
|
|
|
|
14 |
# Carregar a imagem com OpenCV
|
15 |
image = Image.open(uploaded_file)
|
16 |
image = np.array(image)
|
17 |
+
|
18 |
# Mostrar a imagem original
|
19 |
st.image(image, caption="Imagem Original", use_column_width=True)
|
20 |
+
|
21 |
# Opções de processamento
|
22 |
st.sidebar.header("Opções de Processamento")
|
23 |
process_option = st.sidebar.selectbox("Escolha o processamento:",
|
24 |
["Conversão para Escala de Cinza",
|
25 |
"Filtro de Borrão (Blur)",
|
26 |
"Detecção de Bordas (Canny)",
|
27 |
+
"Equalização de Histograma",
|
28 |
+
"Ajuste de Brilho e Contraste",
|
29 |
+
"Detecção de Contornos"])
|
30 |
+
|
31 |
if process_option == "Conversão para Escala de Cinza":
|
32 |
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
33 |
st.image(gray_image, caption="Imagem em Escala de Cinza", use_column_width=True, channels="GRAY")
|
34 |
+
|
35 |
elif process_option == "Filtro de Borrão (Blur)":
|
36 |
+
ksize = st.sidebar.slider("Tamanho do kernel de desfoque:", min_value=3, max_value=15, step=2, value=5)
|
37 |
+
blur_image = cv2.GaussianBlur(image, (ksize, ksize), 0)
|
38 |
st.image(blur_image, caption="Imagem com Filtro de Borrão", use_column_width=True)
|
39 |
+
|
40 |
elif process_option == "Detecção de Bordas (Canny)":
|
41 |
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
42 |
+
threshold1 = st.sidebar.slider("Threshold 1:", min_value=50, max_value=150, value=100)
|
43 |
+
threshold2 = st.sidebar.slider("Threshold 2:", min_value=100, max_value=300, value=200)
|
44 |
+
edges = cv2.Canny(gray_image, threshold1, threshold2)
|
45 |
st.image(edges, caption="Bordas Detectadas", use_column_width=True, channels="GRAY")
|
46 |
+
|
47 |
elif process_option == "Equalização de Histograma":
|
48 |
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
49 |
equalized_image = cv2.equalizeHist(gray_image)
|
50 |
st.image(equalized_image, caption="Imagem com Histograma Equalizado", use_column_width=True, channels="GRAY")
|
51 |
+
|
52 |
+
elif process_option == "Ajuste de Brilho e Contraste":
|
53 |
+
brightness = st.sidebar.slider("Brilho:", min_value=-100, max_value=100, value=0)
|
54 |
+
contrast = st.sidebar.slider("Contraste:", min_value=-100, max_value=100, value=0)
|
55 |
+
adjusted_image = cv2.convertScaleAbs(image, alpha=1 + (contrast / 100), beta=brightness)
|
56 |
+
st.image(adjusted_image, caption="Imagem com Ajuste de Brilho e Contraste", use_column_width=True)
|
57 |
+
|
58 |
+
elif process_option == "Detecção de Contornos":
|
59 |
+
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
60 |
+
threshold = st.sidebar.slider("Threshold para Contornos:", min_value=50, max_value=255, value=127)
|
61 |
+
_, thresh = cv2.threshold(gray_image, threshold, 255, cv2.THRESH_BINARY)
|
62 |
+
contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
|
63 |
+
contour_image = cv2.drawContours(image.copy(), contours, -1, (0, 255, 0), 2)
|
64 |
+
st.image(contour_image, caption="Contornos Detectados", use_column_width=True)
|
65 |
+
|
66 |
+
# Exibição do histograma
|
67 |
+
st.sidebar.header("Exibir Histograma")
|
68 |
+
if st.sidebar.checkbox("Mostrar histograma da imagem"):
|
69 |
+
if len(image.shape) == 3:
|
70 |
+
colors = ("b", "g", "r")
|
71 |
+
for i, color in enumerate(colors):
|
72 |
+
hist = cv2.calcHist([image], [i], None, [256], [0, 256])
|
73 |
+
st.line_chart(hist[:, 0])
|
74 |
+
else:
|
75 |
+
hist = cv2.calcHist([image], [0], None, [256], [0, 256])
|
76 |
+
st.line_chart(hist[:, 0])
|
77 |
+
|
78 |
# Botão para salvar o resultado
|
79 |
if st.button("Salvar Imagem Processada"):
|
80 |
result_path = "imagem_processada.png"
|
81 |
+
cv2.imwrite(result_path, locals()[process_option.lower().replace(" ", "_") + "_image"])
|
82 |
+
st.success(f"Imagem salva como {result_path}")
|
83 |
+
else:
|
84 |
+
st.info("Por favor, envie uma imagem médica para começar.")
|