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)