Spaces:
Sleeping
Sleeping
| import cv2 as cv | |
| import gradio as gr | |
| import numpy as np | |
| def change_image_color(img, option, color_from=None, color_to=None, tolerance=10): | |
| # HATA DÜZELTME 1: Gradio'dan gelen RGB görüntüyü OpenCV'nin anlayacağı BGR'ye çevir. | |
| img_bgr = cv.cvtColor(img, cv.COLOR_RGB2BGR) | |
| if option == "R <-> G (Kanal Değiştir)": | |
| # AÇIKLAMA: Bu işlem kırmızı ve yeşil kanallarını takas eder. | |
| b, g, r = cv.split(img_bgr) | |
| swapped_img = cv.merge([b, r, g]) | |
| # HATA DÜZELTME 4: Çıktıyı tekrar RGB'ye çevirerek Gradio'ya gönder. | |
| return cv.cvtColor(swapped_img, cv.COLOR_BGR2RGB) | |
| elif option == "R <-> B (Kanal Değiştir)": | |
| # AÇIKLAMA: Bu işlem kırmızı ve mavi kanallarını takas eder. | |
| b, g, r = cv.split(img_bgr) | |
| swapped_img = cv.merge([r, g, b]) | |
| return cv.cvtColor(swapped_img, cv.COLOR_BGR2RGB) | |
| elif option == "Gri Tonlamalı": | |
| gray_img = cv.cvtColor(img_bgr, cv.COLOR_BGR2GRAY) | |
| # Gri tonlamalı görüntü zaten tek kanal olduğu için Gradio'ya RGB olarak gönderilmelidir. | |
| return cv.cvtColor(gray_img, cv.COLOR_GRAY2RGB) | |
| elif option == "Özel Renk Dönüşümü" and color_from is not None and color_to is not None: | |
| # HATA DÜZELTME 2: Gelen Hex (RGB) renklerini BGR sırasına çevir. | |
| # Örnek: #FF0000 (Kırmızı) -> [255, 0, 0] (RGB) -> [0, 0, 255] (BGR) | |
| r_from, g_from, b_from = tuple(int(color_from.lstrip('#')[i:i+2], 16) for i in (0, 2, 4)) | |
| color_from_bgr = np.array([b_from, g_from, r_from]) | |
| r_to, g_to, b_to = tuple(int(color_to.lstrip('#')[i:i+2], 16) for i in (0, 2, 4)) | |
| color_to_bgr = [b_to, g_to, r_to] | |
| # HATA DÜZELTME 3: Renk tespiti için bir tolerans aralığı oluştur. | |
| # np.clip ile değerlerin 0-255 aralığında kalmasını sağlıyoruz. | |
| lower_bound = np.clip(color_from_bgr - tolerance, 0, 255) | |
| upper_bound = np.clip(color_from_bgr + tolerance, 0, 255) | |
| # Maske oluştur ve rengi değiştir | |
| mask = cv.inRange(img_bgr, lower_bound, upper_bound) | |
| img_bgr[mask != 0] = color_to_bgr | |
| return cv.cvtColor(img_bgr, cv.COLOR_BGR2RGB) | |
| # "Orijinal" veya geçersiz bir seçenek gelirse | |
| return cv.cvtColor(img_bgr, cv.COLOR_BGR2RGB) | |
| # Gradio arayüzü tanımla | |
| interface = gr.Interface( | |
| fn=change_image_color, | |
| inputs=[ | |
| gr.Image(type="numpy", label="Resim Yükleyin"), | |
| gr.Dropdown( | |
| ["Orijinal", "R <-> G (Kanal Değiştir)", "R <-> B (Kanal Değiştir)", "Gri Tonlamalı", "Özel Renk Dönüşümü"], | |
| label="Dönüşüm Seçin", | |
| value="Orijinal" # Başlangıç değeri | |
| ), | |
| gr.ColorPicker(label="Dönüştürülecek Renk (Kaynak)", value="#00FF00"), | |
| gr.ColorPicker(label="Yeni Renk (Hedef)", value="#FF0000"), | |
| gr.Slider(minimum=1, maximum=100, value=20, label="Renk Toleransı") | |
| ], | |
| outputs=gr.Image(type="numpy", label="Sonuç"), | |
| title="Görüntü Renk Dönüştürme Aracı", | |
| description="Bir dönüşüm seçin veya 'Özel Renk Dönüşümü' ile belirli bir rengi tolerans dahilinde başka bir renge dönüştürün." | |
| ) | |
| interface.launch() |