drmurataltun commited on
Commit
5a9fb83
·
verified ·
1 Parent(s): e9c45a7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -33
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
- # Orijinal görüntüyü oku
7
- img_bgr = img.copy()
8
 
9
- if option == "R-G (Kırmızı Yeşile)":
10
- # Kırmızıları yeşil yap
11
  b, g, r = cv.split(img_bgr)
12
- new_img = cv.merge([b, r, g])
13
- return new_img
14
- elif option == "G-R (Yeşil Kırmızıya)":
15
- # Yeşili kırmızıya çevir
16
- b, g, r = cv.split(img_bgr)
17
- new_img = cv.merge([b, r, g])
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
- new_img = cv.merge([r, g, b])
23
- return new_img
 
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
- # Belirli bir rengi başka bir renge dönüştür
30
- color_from_bgr = [int(color_from[i:i+2], 16) for i in (1, 3, 5)]
31
- color_to_bgr = [int(color_to[i:i+2], 16) for i in (1, 3, 5)]
32
- lower_bound = np.array(color_from_bgr, dtype="uint8")
33
- upper_bound = lower_bound
 
 
 
 
 
 
 
 
 
34
  mask = cv.inRange(img_bgr, lower_bound, upper_bound)
35
  img_bgr[mask != 0] = color_to_bgr
36
- return img_bgr
37
- else:
38
- # Orijinal görüntü
39
- return img_bgr
 
 
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(["Orijinal", "R-G (Kırmızı Yeşile)", "G-R (Yeşil Kırmızıya)", "R-B (Kırmızı Maviye)", "Gri Tonlamalı", "Özel Renk Dönüşümü"], label="Dönüşüm Seçin"),
47
- gr.ColorPicker(label="Dönüştürülecek Renk"),
48
- gr.ColorPicker(label="Yeni Renk")
 
 
 
 
 
49
  ],
50
- outputs="image",
51
- title="Renk Dönüştürme Aracı",
52
- description="Resmin rengini dönüştürmek için bir seçenek belirleyin ve isterseniz belirli bir rengi başka bir renge dönüştürün."
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()