Spaces:
Sleeping
Sleeping
import streamlit as st | |
import cv2 | |
import numpy as np | |
from PIL import Image | |
import io | |
def load_image(): | |
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"]) | |
if uploaded_file is not None: | |
image_bytes = uploaded_file.read() | |
opencv_image = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), 1) | |
return opencv_image | |
return None | |
def denoise(image): | |
return cv2.fastNlMeansDenoisingColored(image, None, 10, 10, 7, 21) | |
def sharpen(image): | |
kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]]) | |
return cv2.filter2D(image, -1, kernel) | |
def edge_detection(image): | |
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
sobel = cv2.Sobel(gray, cv2.CV_64F, 1, 1, ksize=5) | |
sobel = np.uint8(np.absolute(sobel)) | |
prewitt_x = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=3) | |
prewitt_y = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=3) | |
prewitt = np.sqrt(prewitt_x**2 + prewitt_y**2) | |
prewitt = np.uint8(prewitt) | |
canny = cv2.Canny(gray, 100, 200) | |
return sobel, prewitt, canny | |
def main(): | |
st.title("Image Enhancement App") | |
image = load_image() | |
if image is not None: | |
st.subheader("Original Image") | |
st.image(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) | |
st.subheader("Enhanced Images") | |
col1, col2 = st.columns(2) | |
with col1: | |
st.write("Denoised Image") | |
denoised = denoise(image) | |
st.image(cv2.cvtColor(denoised, cv2.COLOR_BGR2RGB)) | |
with col2: | |
st.write("Sharpened Image") | |
sharpened = sharpen(denoised) | |
st.image(cv2.cvtColor(sharpened, cv2.COLOR_BGR2RGB)) | |
st.subheader("Edge Detection") | |
sobel, prewitt, canny = edge_detection(sharpened) | |
col1, col2, col3 = st.columns(3) | |
with col1: | |
st.write("Sobel Edge Detection") | |
st.image(sobel, use_column_width=True) | |
with col2: | |
st.write("Prewitt Edge Detection") | |
st.image(prewitt, use_column_width=True) | |
with col3: | |
st.write("Canny Edge Detection") | |
st.image(canny, use_column_width=True) | |
if __name__ == "__main__": | |
main() |