Python Renk Uzayı ve Nesne Takibi
OpenCV’de 150’den fazla renk uzayı çevirme yöntemi vardır. Bunların en sık kullanılanları BGR – Gray Scale ve BGR – HSV uzayı çevrimleridir.
OpenCV’de renk uzayı değiştirebilmek için cvtColor fonksiyonu kullanılır. Bu fonksiyona 2 parametre gönderilir. Bunlardan biri görüntü ve bir diğeri ise renk uzayı çevirme tipidir.
BGR- Gray Scale dönüşümü için cv2.COLOR_BGR2GRAY parametresi kullanılır. BGR_HSV dönüşümü için ise cv2.COLOR_BGR2GSV kullanılır.
Aşağıdaki kod ile OpenCV içindeki tüm renk uzayı dönüşümlerini görebiliriz.
********************************************
import cv2
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
for val in flags:
print (val)
********************************************
Nesne Takibi
BGR – HSV uzayı dönüşümü sayesinde görüntü içindeki renkli bir nesneyi bulabiliriz. RGB (BGR) uzayına göre HSV uzayında renk tespiti çok daha kolaydır.
Aşağıdaki uygulamamızda görüntü içindeki mavi renkli nesneleri bulacağız. Bunun için test.png adıyla kaydettiğimiz OpenCV logosunu kullanacağız.
********************************************
import cv2
import numpy as np
img = cv2.imread('test.png')
# BGR - HSV Donusumu
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# Mavi rengin HSV uzayindaki araligi
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# HSV icindeki mavi rengi tespit edebilmek icin threshold
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND islemi ve mask uygulaniyor
res = cv2.bitwise_and(img,img, mask= mask)
cv2.imshow('img',img)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
******************************************
Bu işlemin aynısını video dosyası üzerinde ya da kamera görüntüsü ile yapmanız da mümkün. Aşağıdaki kod parçacığı ile aynı işlemi webcam görüntüsü üzerinde uygulayabilirsiniz, kodu test etmeniz için mavi renk bir nesnenin kamera görüntüsü içinde olması yeterlidir.
******************************************
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
# Görüntü frame'i al
_, frame = cap.read()
# HSV uzayina donustur
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# Mavi rengin HSV uzayindaki araligi
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# HSV icindeki mavi rengi tespit edebilmek icin threshold
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND islemi ve mask uygulaniyor
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()
****************************************