Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -2,55 +2,69 @@ import cv2 as cv
|
|
| 2 |
import gradio as gr
|
| 3 |
import numpy as np
|
| 4 |
|
| 5 |
-
def change_image_color(img, option, color_from=None, color_to=None):
|
| 6 |
-
#
|
| 7 |
-
img_bgr = img.
|
| 8 |
|
| 9 |
-
if option == "R
|
| 10 |
-
#
|
| 11 |
b, g, r = cv.split(img_bgr)
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
return new_img
|
| 19 |
-
elif option == "R-B (Kırmızı Maviye)":
|
| 20 |
-
# Kırmızıyı maviye çevir
|
| 21 |
b, g, r = cv.split(img_bgr)
|
| 22 |
-
|
| 23 |
-
return
|
|
|
|
| 24 |
elif option == "Gri Tonlamalı":
|
| 25 |
-
# Gri tonlamalı görüntü
|
| 26 |
gray_img = cv.cvtColor(img_bgr, cv.COLOR_BGR2GRAY)
|
|
|
|
| 27 |
return cv.cvtColor(gray_img, cv.COLOR_GRAY2RGB)
|
|
|
|
| 28 |
elif option == "Özel Renk Dönüşümü" and color_from is not None and color_to is not None:
|
| 29 |
-
#
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
mask = cv.inRange(img_bgr, lower_bound, upper_bound)
|
| 35 |
img_bgr[mask != 0] = color_to_bgr
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
|
|
|
|
|
|
| 40 |
|
| 41 |
# Gradio arayüzü tanımla
|
| 42 |
interface = gr.Interface(
|
| 43 |
fn=change_image_color,
|
| 44 |
inputs=[
|
| 45 |
gr.Image(type="numpy", label="Resim Yükleyin"),
|
| 46 |
-
gr.Dropdown(
|
| 47 |
-
|
| 48 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
],
|
| 50 |
-
outputs="
|
| 51 |
-
title="Renk Dönüştürme Aracı",
|
| 52 |
-
description="
|
| 53 |
)
|
| 54 |
|
| 55 |
-
# Arayüzü başlat
|
| 56 |
interface.launch()
|
|
|
|
| 2 |
import gradio as gr
|
| 3 |
import numpy as np
|
| 4 |
|
| 5 |
+
def change_image_color(img, option, color_from=None, color_to=None, tolerance=10):
|
| 6 |
+
# HATA DÜZELTME 1: Gradio'dan gelen RGB görüntüyü OpenCV'nin anlayacağı BGR'ye çevir.
|
| 7 |
+
img_bgr = cv.cvtColor(img, cv.COLOR_RGB2BGR)
|
| 8 |
|
| 9 |
+
if option == "R <-> G (Kanal Değiştir)":
|
| 10 |
+
# AÇIKLAMA: Bu işlem kırmızı ve yeşil kanallarını takas eder.
|
| 11 |
b, g, r = cv.split(img_bgr)
|
| 12 |
+
swapped_img = cv.merge([b, r, g])
|
| 13 |
+
# HATA DÜZELTME 4: Çıktıyı tekrar RGB'ye çevirerek Gradio'ya gönder.
|
| 14 |
+
return cv.cvtColor(swapped_img, cv.COLOR_BGR2RGB)
|
| 15 |
+
|
| 16 |
+
elif option == "R <-> B (Kanal Değiştir)":
|
| 17 |
+
# AÇIKLAMA: Bu işlem kırmızı ve mavi kanallarını takas eder.
|
|
|
|
|
|
|
|
|
|
| 18 |
b, g, r = cv.split(img_bgr)
|
| 19 |
+
swapped_img = cv.merge([r, g, b])
|
| 20 |
+
return cv.cvtColor(swapped_img, cv.COLOR_BGR2RGB)
|
| 21 |
+
|
| 22 |
elif option == "Gri Tonlamalı":
|
|
|
|
| 23 |
gray_img = cv.cvtColor(img_bgr, cv.COLOR_BGR2GRAY)
|
| 24 |
+
# Gri tonlamalı görüntü zaten tek kanal olduğu için Gradio'ya RGB olarak gönderilmelidir.
|
| 25 |
return cv.cvtColor(gray_img, cv.COLOR_GRAY2RGB)
|
| 26 |
+
|
| 27 |
elif option == "Özel Renk Dönüşümü" and color_from is not None and color_to is not None:
|
| 28 |
+
# HATA DÜZELTME 2: Gelen Hex (RGB) renklerini BGR sırasına çevir.
|
| 29 |
+
# Örnek: #FF0000 (Kırmızı) -> [255, 0, 0] (RGB) -> [0, 0, 255] (BGR)
|
| 30 |
+
r_from, g_from, b_from = tuple(int(color_from.lstrip('#')[i:i+2], 16) for i in (0, 2, 4))
|
| 31 |
+
color_from_bgr = np.array([b_from, g_from, r_from])
|
| 32 |
+
|
| 33 |
+
r_to, g_to, b_to = tuple(int(color_to.lstrip('#')[i:i+2], 16) for i in (0, 2, 4))
|
| 34 |
+
color_to_bgr = [b_to, g_to, r_to]
|
| 35 |
+
|
| 36 |
+
# HATA DÜZELTME 3: Renk tespiti için bir tolerans aralığı oluştur.
|
| 37 |
+
# np.clip ile değerlerin 0-255 aralığında kalmasını sağlıyoruz.
|
| 38 |
+
lower_bound = np.clip(color_from_bgr - tolerance, 0, 255)
|
| 39 |
+
upper_bound = np.clip(color_from_bgr + tolerance, 0, 255)
|
| 40 |
+
|
| 41 |
+
# Maske oluştur ve rengi değiştir
|
| 42 |
mask = cv.inRange(img_bgr, lower_bound, upper_bound)
|
| 43 |
img_bgr[mask != 0] = color_to_bgr
|
| 44 |
+
|
| 45 |
+
return cv.cvtColor(img_bgr, cv.COLOR_BGR2RGB)
|
| 46 |
+
|
| 47 |
+
# "Orijinal" veya geçersiz bir seçenek gelirse
|
| 48 |
+
return cv.cvtColor(img_bgr, cv.COLOR_BGR2RGB)
|
| 49 |
+
|
| 50 |
|
| 51 |
# Gradio arayüzü tanımla
|
| 52 |
interface = gr.Interface(
|
| 53 |
fn=change_image_color,
|
| 54 |
inputs=[
|
| 55 |
gr.Image(type="numpy", label="Resim Yükleyin"),
|
| 56 |
+
gr.Dropdown(
|
| 57 |
+
["Orijinal", "R <-> G (Kanal Değiştir)", "R <-> B (Kanal Değiştir)", "Gri Tonlamalı", "Özel Renk Dönüşümü"],
|
| 58 |
+
label="Dönüşüm Seçin",
|
| 59 |
+
value="Orijinal" # Başlangıç değeri
|
| 60 |
+
),
|
| 61 |
+
gr.ColorPicker(label="Dönüştürülecek Renk (Kaynak)", value="#00FF00"),
|
| 62 |
+
gr.ColorPicker(label="Yeni Renk (Hedef)", value="#FF0000"),
|
| 63 |
+
gr.Slider(minimum=1, maximum=100, value=20, label="Renk Toleransı")
|
| 64 |
],
|
| 65 |
+
outputs=gr.Image(type="numpy", label="Sonuç"),
|
| 66 |
+
title="Görüntü Renk Dönüştürme Aracı",
|
| 67 |
+
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."
|
| 68 |
)
|
| 69 |
|
|
|
|
| 70 |
interface.launch()
|