OpenCV-Renk Alanı Değiştirme Ve Nesne Takibi

Hedefler:

Bu yazıda görüntü üzerindeki renkleri bir renk uzayından diğerine çevirmeyi(convert) öğreneceğiz.
Ek olarak bir objenin gerçek zamanlı olarak akan görüntü üzerinden ayrılması(extract) işlemini öğreneceğiz.
Kullanılacak Fonksiyonlar: cv2.cvtColor(), cv2.inRange()

Renk Alanlarını Değiştirme:

OpenCV içerisinde 150 den fazla renk uzayı değiştirme(convert) metodu bulunmakta. İlerleyen zamanlarda birçoğunu uygulamalarımız içinde kullanacağız. İş bu yazının konusu olan dönüştürme metodları ise BGR <-> Gray ve BGR <-> HSV metodlarından oluşmaktadır.
Renk dönüştürmek için cv2.cvtColor(input_image,flag) fonksiyonunu kullanacağız. "Flag" dönüşümümüzün(convert) çeşidine(type) karar verecek.
BGR -> Gray dönüşümü için cv2.COLOR_BGR2GRAY flag olarak seçiliyor. Benzer şekilde BGR -> HSV dönüşümü için ise cv2.COLOR_BGR2HSV flag olarak kullanıyoruz. Diğer flag'leri merak ediyorsanız. Aşağıdaki kod bloğunu python terminalinizden çalıştırmanız yeterli olacaktır.
>>> import cv2
>>> flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
>>> print flags

Nesne Takibi

Artık bir görüntüyü BGR'den HSV'ye nasıl çevirebileceğimizi biliyoruz. Şimdi bunu herhangi bir nesnenin rengini görüntü içinde ayırt etmek için nasıl kullanırızı göreceğiz. HSV renk uzayında renkleri ayırt etmek BGR'ye göre çok daha kolay olmakta. Ayrıntılı bilgi için web'de arama yapabilirsiniz. Uygulamamızda mavi renkli bir objeyi görüntüdeki diğer nesnelerden ayıracağız(extracting).

İşte Adımlar:

Video'nun her karesini yakala
Görüntülere BGR -> HSV işlemini uygula
Değer aralığını(range) belirlediğimiz nesneyi görüntüye threhold işlemini uyguladık.
Sonra mavi objemizi görüntüden ayırıyoruz(extracting)
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):

    # Her görüntü çerçevesini(frame) yakala
    _, frame = cap.read()

    # BGR'yi HSV'ye çevir
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # HSV renk uzayında mavi renk oranını(range) ayarla
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])

    # Görüntüde Mavi Objeye Threshold Uygula
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # Orjinal Görüntüye Bitwise-AND İşlemini Uygula
    res = cv2.bitwise_and(frame,frame, mask= mask)

    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break
cv2.destroyAllWindows()
Bu yöntem nesne takibinin en basit yöntemi, ilerleyen zamanlarda çerçeveleri(countour) kullanarak merkez noktayı veya spesifik bir noktayı takip işlemini gerçekleştirebileceğiz.

Soru:
HSV renk uzayında renklerin değerlerini(range) nasıl öğrenebilirim?
Cevap:
Aşağıdaki örnekte yeşil renginin HSV değerlerinin nasıl bulunduğunu görüyoruz. Sizde bu yöntem yardımı ile ihtiyacınız olan değeri elde edebilirsiniz.
>>> green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
>>> print hsv_green
[[[ 60 255 255]]]

Kaynakça: http://docs.opencv.org/3.2.0/
Kaynak dosyaları ve Resimleri indirmek için: TIKLAYINIZ

0 yorum: