|
|
import cv2 |
|
|
import tempfile |
|
|
from io import BytesIO |
|
|
import streamlit as st |
|
|
import numpy as np |
|
|
|
|
|
def resize_image(image, size): |
|
|
return cv2.resize(image, size, interpolation=cv2.INTER_AREA) |
|
|
|
|
|
def automatically_change_segment_colors(segmented_image): |
|
|
|
|
|
unique_labels = np.unique(segmented_image.reshape(-1, 3), axis=0) |
|
|
new_colors = np.random.randint(0, 256, (len(unique_labels), 3), dtype=np.uint8) |
|
|
|
|
|
|
|
|
for i, label in enumerate(unique_labels): |
|
|
mask = np.all(segmented_image == label, axis=-1) |
|
|
segmented_image[mask] = new_colors[i] |
|
|
|
|
|
return segmented_image |
|
|
|
|
|
def download_image(image_array, file_name): |
|
|
try: |
|
|
image_array = cv2.cvtColor(image_array, cv2.COLOR_BGR2RGB) |
|
|
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.png') |
|
|
success = cv2.imwrite(temp_file.name, image_array) |
|
|
if not success: |
|
|
st.error("Could not save image.") |
|
|
return |
|
|
with open(temp_file.name, 'rb') as f: |
|
|
bytes = f.read() |
|
|
st.download_button( |
|
|
label="Download Image", |
|
|
data=BytesIO(bytes), |
|
|
file_name=file_name, |
|
|
mime='image/png', |
|
|
) |
|
|
except Exception as e: |
|
|
st.error(f"An error occurred: {e}") |