Image_Enhancer / app.py
NayabShakeel's picture
Update app.py
dd7bca6 verified
import os
# Force installation of compatible versions
os.system("pip install --force-reinstall numpy==1.23.5 opencv-python-headless==4.8.0.74")
import cv2
import streamlit as st
from PIL import Image
import numpy as np
import cv2
# Ensure OpenCV installation
try:
import cv2
except ModuleNotFoundError:
os.system("pip install opencv-python-headless==4.8.0.74")
import cv2
# Streamlit App Title
st.title("Image Enhancer App")
# File Uploader
uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
# Load image using PIL and convert to OpenCV format
image = Image.open(uploaded_file)
image_np = np.array(image)
# Display original image
st.subheader("Original Image")
st.image(image, caption="Uploaded Image", use_container_width=True)
# Enhance Options
st.subheader("Enhancement Options")
enhancement = st.selectbox("Choose an enhancement type:", [
"Brightness Adjustment",
"Contrast Enhancement",
"Sharpening",
"Denoising",
"Edge Detection",
"Apply All Enhancements"
])
enhanced_image = image_np
if enhancement == "Brightness Adjustment":
brightness = st.slider("Adjust Brightness", -100, 100, 0)
enhanced_image = cv2.convertScaleAbs(enhanced_image, beta=brightness)
elif enhancement == "Contrast Enhancement":
contrast = st.slider("Adjust Contrast", 1.0, 3.0, 1.0)
alpha = contrast # Simple contrast control
beta = 0 # Simple brightness control
enhanced_image = cv2.convertScaleAbs(enhanced_image, alpha=alpha, beta=beta)
elif enhancement == "Sharpening":
kernel = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
enhanced_image = cv2.filter2D(enhanced_image, -1, kernel)
elif enhancement == "Denoising":
h = st.slider("Denoising Strength", 1, 20, 10)
enhanced_image = cv2.fastNlMeansDenoisingColored(enhanced_image, None, h, h, 7, 21)
elif enhancement == "Edge Detection":
threshold1 = st.slider("Threshold 1", 50, 200, 100)
threshold2 = st.slider("Threshold 2", 50, 300, 200)
gray_image = cv2.cvtColor(enhanced_image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray_image, threshold1, threshold2)
enhanced_image = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
elif enhancement == "Apply All Enhancements":
# Apply all filters sequentially
brightness = 50
contrast = 1.5
h = 10
kernel = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
gray_image = cv2.cvtColor(enhanced_image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray_image, 100, 200)
enhanced_image = cv2.convertScaleAbs(enhanced_image, beta=brightness)
enhanced_image = cv2.convertScaleAbs(enhanced_image, alpha=contrast, beta=0)
enhanced_image = cv2.filter2D(enhanced_image, -1, kernel)
enhanced_image = cv2.fastNlMeansDenoisingColored(enhanced_image, None, h, h, 7, 21)
edges = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
# Display Enhanced Image
st.subheader("Enhanced Image")
st.image(enhanced_image, caption="Enhanced Image", use_container_width=True)
# Download Option
st.subheader("Download Enhanced Image")
result_image = Image.fromarray(enhanced_image)
st.download_button(
label="Download Image",
data=result_image.tobytes(),
file_name="enhanced_image.png",
mime="image/png"
)