Spaces:
Sleeping
Sleeping
File size: 3,912 Bytes
d8a38ad f5fcd03 d8a38ad 4cd134c b64a51d d8a38ad 70f6abe d8a38ad a15455d d8a38ad 89bcbb9 b773117 fcdc6b9 b773117 89bcbb9 b773117 7a7515f b773117 71ac1ce b773117 923ddfd 89bcbb9 b773117 b717ae9 f5fcd03 b717ae9 f5fcd03 b717ae9 b773117 a15455d b773117 a15455d f5fcd03 a15455d d8a38ad f66d1ee b773117 a8ce254 6c7dde0 b773117 6c7dde0 f66d1ee 6c7dde0 f66d1ee fa99dd6 6c7dde0 89bcbb9 f66d1ee d8a38ad f66d1ee f5fcd03 f66d1ee 7065049 4cd134c 04bf698 f66d1ee d8a38ad f66d1ee e481a24 a15455d b717ae9 f5fcd03 b717ae9 deac01f f5fcd03 deac01f b717ae9 f66d1ee 89bcbb9 a15455d 923ddfd a15455d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
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)
|