changeColor / app.py
drmurataltun's picture
Update app.py
5a9fb83 verified
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()