mallelapreethi's picture
Update app.py
fa99dd6 verified
raw
history blame contribute delete
No virus
3.91 kB
import streamlit as st
import cv2
import numpy as np
from PIL import Image
import io
# Function to convert image to sketch with adjustable outline thickness
def image_to_sketch(image):
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
inverted_image = 255 - gray_image
blurred_image = cv2.GaussianBlur(inverted_image, (21, 21), 0)
inverted_blurred = 255 - blurred_image
sketch = cv2.divide(gray_image, inverted_blurred, scale=256.0)
return sketch
# Streamlit app layout
st.set_page_config(page_title="Image to Sketch Converter", page_icon="🎨", layout="centered")
# Custom CSS for heading color and footer positioning
st.markdown("""
<style>
.title {
color: blue;
font-size: 2.5em;
font-weight: bold;
text-align: center;
}
.footer {
position: relative;
bottom: 0;
width: 100%;
background-color: orange;
text-align: center;
text-color: black;
padding: 10px;
font-weight: bold;
margin-top: 50px;
}
.content {
margin-bottom: 70px;
}
.spacing {
margin: 10px 10px;
}
.centered-button {
display: flex;
justify-content: center;
align-items: center;
gap: 10px;
}
</style>
""", unsafe_allow_html=True)
# Title and description
st.markdown('<p class="title">🎨 Image to Sketch Converter</p>', unsafe_allow_html=True)
st.markdown("""
Convert your images into beautiful sketches with this simple app.
Upload an image, and get the sketch version instantly! You can even download the sketch.
""")
# Example conversions
st.subheader("Example Conversions")
# Load and display example image
example_image_path = 'Dog.jpg'
example_image = cv2.imread(example_image_path)
if example_image is not None:
# Convert BGR to RGB for correct color display
example_image_rgb = cv2.cvtColor(example_image, cv2.COLOR_BGR2RGB)
example_sketch = image_to_sketch(example_image)
col1, col2 = st.columns(2)
with col1:
st.image(example_image_rgb, caption='Original Image', use_column_width=True)
with col2:
st.image(example_sketch, caption='Sketch', use_column_width=True)
else:
st.error(f"Failed to load example image from path: {example_image_path}")
# User upload section
st.subheader("Upload Your Image")
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
# Load the image
image = Image.open(uploaded_file)
image_np = np.array(image)
# Determine the format of the uploaded image
image_format = image.format.lower()
st.write("Converting...")
# Convert the image to a sketch with the selected kernel size
sketch = image_to_sketch(image_np)
col3, col4 = st.columns(2)
with col3:
st.image(image, caption='Uploaded Image', use_column_width=True)
with col4:
st.image(sketch, caption='Sketch', use_column_width=True)
# Add some space before the button
st.markdown('<div class="spacing"></div>', unsafe_allow_html=True)
# Convert the sketch to an image and save to an in-memory file object
sketch_image = Image.fromarray(sketch)
buf = io.BytesIO()
sketch_image.save(buf, format=image_format.upper())
byte_im = buf.getvalue()
# Provide a download link for the sketch image in the center
st.markdown('<div class="centered-button">', unsafe_allow_html=True)
btn = st.download_button(
label="Download Sketch",
data=byte_im,
file_name=f"sketch.{image_format}",
mime=f"image/{image_format}"
)
st.markdown('</div>', unsafe_allow_html=True)
else:
st.info("Please upload an image to convert.")
# Footer
st.markdown("""
<div class="footer">
Made by Mallela Preethi
</div>
""", unsafe_allow_html=True)