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 cv2flags = [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 cv2import numpy as npimg = cv2.imread('test.png')# BGR - HSV Donusumuhsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# Mavi rengin HSV uzayindaki araligilower_blue = np.array([110,50,50])upper_blue = np.array([130,255,255])# HSV icindeki mavi rengi tespit edebilmek icin thresholdmask = cv2.inRange(hsv, lower_blue, upper_blue)# Bitwise-AND islemi ve mask uygulaniyorres = 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 cv2import numpy as npcap = 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: breakcv2.destroyAllWindows()
****************************************