File size: 3,141 Bytes
d8a38ad
 
 
 
 
a15455d
d8a38ad
 
 
 
 
 
 
 
a15455d
 
d8a38ad
89bcbb9
b773117
 
 
fcdc6b9
b773117
 
 
 
 
89bcbb9
b773117
 
 
 
 
89bcbb9
 
 
 
b773117
 
 
 
a15455d
b773117
a15455d
 
 
 
d8a38ad
f66d1ee
 
b773117
89bcbb9
6c7dde0
 
b773117
6c7dde0
 
 
 
 
f66d1ee
 
6c7dde0
 
f66d1ee
6c7dde0
 
 
89bcbb9
f66d1ee
 
 
d8a38ad
f66d1ee
 
 
 
 
 
 
 
 
d8a38ad
f66d1ee
 
 
e481a24
a15455d
f66d1ee
 
 
 
 
 
 
 
 
 
 
 
89bcbb9
a15455d
 
 
b773117
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
import streamlit as st
import cv2
import numpy as np
from PIL import Image

# Function to convert image to sketch
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: #f1f1f1;
        text-align: center;
        padding: 10px;
        margin-top: 50px;
    }
    .content {
        margin-bottom: 70px;
    }
    </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!
    """)

# Example conversions
st.subheader("Example Conversions")

# Replace 'Dog.jpg' with the path to an example image if running locally
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 Image', 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:
    image = np.array(Image.open(uploaded_file))
    st.image(image, caption='Uploaded Image', use_column_width=True)
    
    st.write("Converting...")

    sketch = image_to_sketch(image)
    
    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)

    # Provide a download link for the sketch image
    im_pil = Image.fromarray(sketch)
    im_pil.save("sketch.png")
    with open("sketch.png", "rb") as file:
        btn = st.download_button(
            label="Download Sketch",
            data=file,
            file_name="sketch.png",
            mime="image/png"
        )
else:
    st.info("Please upload an image to convert.")

# Footer
st.markdown("""
    <div class="footer">
        Made with ❤️ by MallelaPreethi
    </div>
    """, unsafe_allow_html=True)