DOMMETI's picture
Update app.py
91e2b19 verified
import streamlit as st
import cv2
import numpy as np
from PIL import Image
st.set_page_config(layout="wide")
st.title("Morphological Transformations Viewer")
uploaded_file = st.file_uploader("Upload a grayscale image or Black and White Images", type=["jpg", "jpeg", "png"])
# Resize function to uniform size
def resize(image, size=(300, 300)):
return cv2.resize(image, size)
if uploaded_file is not None:
image = Image.open(uploaded_file).convert("L")
img_np = np.array(image)
iterations = st.slider("Iterations", 1, 10, 1)
kernel = np.ones((5, 5), dtype=np.uint8)
# Perform transformations
dilated = cv2.dilate(img_np, kernel, iterations=iterations)
eroded = cv2.erode(img_np, kernel, iterations=iterations)
opened = cv2.morphologyEx(img_np, cv2.MORPH_OPEN, kernel, iterations=iterations)
closed = cv2.morphologyEx(img_np, cv2.MORPH_CLOSE, kernel, iterations=iterations)
gradient = cv2.morphologyEx(img_np, cv2.MORPH_GRADIENT, kernel, iterations=iterations)
tophat = cv2.morphologyEx(img_np, cv2.MORPH_TOPHAT, kernel, iterations=iterations)
blackhat = cv2.morphologyEx(img_np, cv2.MORPH_BLACKHAT, kernel, iterations=iterations)
# Display original image
st.subheader("Original Image")
resized_original = cv2.resize(img_np, (300, 300))
st.image(resized_original, caption="Original Image", use_container_width=False)
st.markdown("---")
st.subheader("Morphological Transformations")
# First row (4 images)
col1, col2, col3, col4 = st.columns(4)
col1.image(resize(dilated), caption="Dilation", use_container_width=False)
col2.image(resize(eroded), caption="Erosion", use_container_width=False)
col3.image(resize(opened), caption="Opening", use_container_width=False)
col4.image(resize(closed), caption="Closing", use_container_width=False)
# Second row (3 images)
col5, col6, col7 = st.columns(3)
col5.image(resize(gradient), caption="Gradient", use_container_width=False)
col6.image(resize(tophat), caption="Top Hat", use_container_width=False)
col7.image(resize(blackhat), caption="Black Hat", use_container_width=False)