15
Eyl
2020

Python ve OpenCV ile RGB üzerinde HSV renk kodu tespiti

HSV renk uzayı, 1970′ lerde RGB renk uzayına alternatif olarak için geliştirilmiştir. Özellikle görüntü tanıma uygulamalarında bazı durumlarda RGB’ den daha iyi sonuçlar alınmaktadır.

HSV, bazı kaynaklarda HSB veya HSL olarak da geçer ve Hue, Saturation ve Value kelimelerinin baş harflerini ifade eder.

  • Hue: Renk özünü ifade eden sayısal değer.
  • Saturation: H ile seçilmiş olan rengin doygunluğunu ifade eden sayısal değer.
  • Value (Brightness, Lightness): Parlaklığı ifade eden sayısal değer.

HSV; şekilde gibi bir silindir şeklinde ifade edilir. Piksel değeri x için, H değeri x’ in açısal konumunu ifade eder, S değeri x’ in silindirin merkezine uzaklığını, V değeri ise x’ in silindir yüzeyine uzaklığını ifade eder.

HSV sisteminde H ve S değerlerinin ne olduğuna bakmaksızın eğer V değeri sıfıra eşitse 0 ise ortaya çıkan renk siyah olacaktır.

HSV renk uzayının birçok kullanımında H değeri 0 – 255 aralığında, S ve V değerleri 0 – 100 aralığında seçilir. Ancak OpenCV’ de durum farklıdır. OpenCV; H değerini 0 – 179 aralığında, S ve V değerlerini 0 – 255 aralığında tutar. OpenCV için HSV temel renk aralıkları aşağıdaki tablodaki gibidir.

RenkAlt LimitÜst Limit
Turuncu(0, 100, 100)(22, 255, 255)
Sarı(22, 100, 100)(38, 255, 255)
Yeşil(38, 100, 100)(75, 255, 255)
Mavi(75, 100, 100)(130, 255, 255)
Mor(130, 100, 100)(160, 255, 255)
Kırmızı(160, 100, 100)(179, 255, 255)

Aşağıdaki Python kodu ile, yüklenen bir görüntünün üzerinde tıklayarak, tıklanan pikselin HSV kodu alınabilir.

# Yüklenen görüntü üzerindeki rengin HSV kodunu yazdırma www.hbmacit.com
import cv2
import numpy as np

def TiklamaOlayi(olay, x, y, flags, param):
    if olay == cv2.EVENT_LBUTTONDOWN:
        h = hsv[y, x, 0]
        s = hsv[y, x, 1]
        v = hsv[y, x, 2]
        hsvUzayi = 'HSV: ' + str(h) + ' ' + str(s) + ' ' + str(v)
        cv2.putText(goruntu, hsvUzayi, (x,y), cv2.FONT_HERSHEY_PLAIN, 1, (100,20,0),1 )
        cv2.imshow("Goruntu", goruntu)

goruntu = cv2.imread('pythonlogo.jpg') #Buraya istenen bir görüntünün adresini/adını giriniz.
hsv = cv2.cvtColor(goruntu, cv2.COLOR_BGR2HSV)
cv2.imshow("Goruntu", goruntu)
cv2.setMouseCallback('Goruntu',TiklamaOlayi)

cv2.waitKey(0)
cv2.destroyAllWindows()

Kod çalıştırıldığında ekrana gelen görüntü üzerinde tıklanan piksel üzerine HSV renk kodu yazılacaktır.