Renk Uzayı Değiştirme

Temel konulardan olan bir resmin renk uzayı nasıl değiştirilir onu göreceğiz bugün. En basitinden RGB ile HSV renk uzayı arasında geçiş nasıl yapılır onu görelim. Bildiğiniz gibi RGB’nın açılımı red-blue-green’dir ve HSV’nin de açılımı hue-saturation-value yani renk-doygunluk-değerdir. HSV’de renkleri ayıklamak, RGB’den daha kolaydır.

Normalde Opencv kütüphanesinde 150’den fazla renk uzayı değiştirme fonksiyonu mevcuttur fakat şuan biz temel olarak iki tane fonksiyonumuzdan bahsedelim. Birincisi cv2.cvtColor yani açılımı “convert color” da denebilir. Aldığı input görüntümüzün ismi ve değiştirilmek istenen renk uzayının ismidir. Diğer fonksiyonumuz ise cv2.inRange fonksiyonudur, bu foksiyonumuz ise girilen değerler arasındaki renkleri seçmeye yarar. Mesela mavi rengin taban ve tavan renklerini girersek fonksiyona, kolaylıkla mavi rengi görüntümüz arasından seçebiliriz.

Bir örnek yapalım mesela, bir görüntü alıp mavi rengi ayırt etme ve mavi olmayan yerleri karartma uygulaması yapalım. Adım adım;

  1. Görüntümüzü aldık
  2. Renk uzayını RGB’den HSV’ye çevirdik
  3. Mavi rengimiz için eşik değerlerini girdik (mask’leme işlemi)
  4. Artık mavi renkli objemizle üzerinde istediğimiz gibi işlemimizi yapabiliriz.
import cv2
import numpy as np
img=cv2.imread(“imageName.jpg”)#resmimizi import ettik
hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #rgb den hsv uzayına çevirdik
lower_blue=([110,50,50])#mavi tabanını atadık
upper_blue=([130,255,255])#mavi tavanını atadık
mask=cv2.inRange(hsv,lower_blue,upper_blue)
result=cv2.bitwise_and(img,img,mask)
cv2.imshow(‘Orijinal görüntü’, img)
cv2.imshow(‘Sonuç’, result)
cv2.waitKey(0)
cv2.destroyAllWindows()

İşlemek istediğiniz görüntüden istediğiniz rengi seçip işlemlerinize devam edebilirsiniz. Peki ben seçtiğim renk için HSV değerini nasıl bulacağım diyorsanız terminale şu şekilde yazıp istediğinizi elde edebilirsiniz. Örnek olarak official sitede yeşil renk için şu şekilde örnek verilmiş. 60 değerinin 10 eksiği / 10 fazlasını alarak yeşil rengi seçebilirsiniz, kendinizde belirleyebilirsiniz.

>>> green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
>>> print(hsv_green)
[[[ 60 255 255]]]