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.

Nasıl Kullanılır?

  1. Sol taraftaki alana bir görüntü yükleyin veya sürükleyip bırakın.
  2. Açılır menüden istediğiniz filtreyi seçin.
  3. Filtrelenmiş görüntünüz anında görüntülenecektir.

Filtreler Hakkında

Bir görüntü yükelyerek denemeye başlayabilirsiniz. 🎨

""" footer = f"""

GitHub LinkedIn yusufenes

🎨 Görüntü Filtreleme Uygulaması 🖼️ © 2024 ©

""" 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)