import cv2 import numpy as np import gradio as gr def apply_filter(image, filter_type): if image is None: # Resim var yok kontrol return None # Görüntüyü BGR'den RGB'ye çevir gradio için if len(image.shape) == 3: image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # daha sonra kullanıcının seçimine göre işlemler uygulanıyor if filter_type == "Orijinal": result = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) elif filter_type == "Bulanıklaştırma": result = cv2.GaussianBlur(image, (15, 15), 0) result = cv2.cvtColor(result, cv2.COLOR_BGR2RGB) elif filter_type == "Siyah Beyaz": result = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) result = cv2.cvtColor(result, cv2.COLOR_GRAY2RGB) elif filter_type == "Kenar Algılama": gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) result = cv2.Canny(gray, 100, 200) result = cv2.cvtColor(result, cv2.COLOR_GRAY2RGB) elif filter_type == "Keskinleştirme": kernel = np.array([[-1,-1,-1], [-1, 9,-1], [-1,-1,-1]]) result = cv2.filter2D(image, -1, kernel) result = cv2.cvtColor(result, cv2.COLOR_BGR2RGB) elif filter_type == "Vintage": kernel = np.array([[0.272, 0.534, 0.131], [0.349, 0.686, 0.168], [0.393, 0.769, 0.189]]) result = cv2.transform(image, kernel) result = cv2.cvtColor(result, cv2.COLOR_BGR2RGB) elif filter_type == "Mozaik": h, w = image.shape[:2] block_size = 15 for i in range(0, h, block_size): for j in range(0, w, block_size): image[i:i+block_size, j:j+block_size] = \ image[i:i+block_size, j:j+block_size].mean(axis=(0,1)) result = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) elif filter_type == "Negatif": result = 255 - image result = cv2.cvtColor(result, cv2.COLOR_BGR2RGB) elif filter_type == "Emboss": kernel = np.array([[-2,-1,0], [-1, 1,1], [ 0, 1,2]]) result = cv2.filter2D(image, -1, kernel) + 128 result = cv2.cvtColor(result, cv2.COLOR_BGR2RGB) elif filter_type == "Poster": num_colors = 8 result = image // (256 // num_colors) * (256 // num_colors) result = cv2.cvtColor(result, cv2.COLOR_BGR2RGB) elif filter_type == "Kabartma": kernel = np.array([[0,-1,-1], [1, 0,-1], [1, 1, 0]]) result = cv2.filter2D(image, -1, kernel) + 128 result = cv2.cvtColor(result, cv2.COLOR_BGR2RGB) elif filter_type == "Rüya": result = cv2.GaussianBlur(image, (21, 21), 0) result = cv2.addWeighted(image, 1.5, result, -0.5, 0) result = cv2.cvtColor(result, cv2.COLOR_BGR2RGB) return result aciklama = f""" Bu uygulama, OpenCV teknolojisini kullanarak görüntülerinize çeşitli filtreler uygulamanızı sağlar. Yüklediğiniz görüntüye 12 farklı efekt uygulayabilirsiniz.
Bir görüntü yükelyerek denemeye başlayabilirsiniz. 🎨
""" footer = f"""""" def create_interface(): filters = [ "Orijinal", "Bulanıklaştırma", "Siyah Beyaz", "Kenar", "Keskinleştirme", "Vintage", "Mozaik", "Negatif Dönüşüm", "Emboss", "Poster", "Kabartma", "Rüya" ] interface = gr.Interface( fn=apply_filter, inputs=[ gr.Image(label="Görüntü Yükle"), gr.Dropdown(choices=filters, label="Dönüştürmek istediğiniz filtreyi seçiniz:", value="Orijinal") ], outputs=gr.Image(label="Filtrelenmiş Çıktı"), title="Görüntü Filtreleme Uygulaması", description=aciklama, article=footer, theme="huggingface", examples=[ ["resim.jpg", "Orijinal"], ["resim.jpg", "Siyah Beyaz"], ["resim.jpg", "Vintage"] ] ) return interface if __name__ == "__main__": interface = create_interface() interface.launch(share=True)