import gradio as gr from gradio_imageslider import ImageSlider import cv2 import numpy as np def convert_to_grayscale(image): """ 이미지를 흑백으로 변환. Gradio는 RGB 형식의 이미지를 제공하므로, OpenCV에서 사용하기 위해 BGR로 변환 후 그레이스케일로 변환. """ # RGB를 BGR로 변환 bgr_image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # BGR을 그레이스케일로 변환 gray_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY) return gray_image def convert_and_save(image): """ 이미지를 흑백으로 변환하고, 다운로드 가능한 PNG 파일로 저장. 변경 전 이미지는 원본, 변경 후 이미지는 흑백 이미지로 슬라이드에 표시. """ # 흑백 이미지 변환 gray_image = convert_to_grayscale(image) # 흑백 이미지를 PNG로 저장 output_path = "output.png" cv2.imwrite(output_path, gray_image) # 원본 이미지는 이미 RGB 형식 original_rgb = image.copy() # 흑백 이미지를 RGB 형식으로 변환 (슬라이드 호환을 위해) gray_rgb = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2RGB) # 변경 전후 이미지를 슬라이드로 반환 (변경 전: 원본, 변경 후: 흑백) return [original_rgb, gray_rgb], output_path # 슬라이더 설정 slider = ImageSlider(label="변환 전후 이미지") # Gradio 인터페이스 정의 iface = gr.Interface( fn=convert_and_save, inputs="image", outputs=[slider, "file"], examples=["1.png", "2.jpg", "3.png"], # 샘플 이미지 추가 title="이미지 흑백 변환기", description="이미지를 업로드하면 원본과 흑백으로 변환된 이미지를 슬라이드로 비교할 수 있으며, 흑백 이미지를 PNG 파일으로 다운로드할 수 있습니다." ) if __name__ == "__main__": iface.launch()