Я занимаюсь разработкой приложения, которое определяет основной цвет в кадре. Для этого я использовал код python и цветовые диапазоны HSV. Мой пример кода для определения синего приведен ниже.
import cv2
def detectBlue(frame):
# Convert BGR to HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# define range of green color in HSV
lower_blue = np.array([101, 39, 64])
upper_blue = np.array([140, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
kernel = np.ones((5,5),'int')
dilated = cv2.dilate(mask,kernel)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask=mask)
ret,thrshed = cv2.threshold(cv2.cvtColor(res,cv2.COLOR_BGR2GRAY),3,255,cv2.THRESH_BINARY)
#img,contours,hier = cv2.findContours(thrshed,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
contours,hier = cv2.findContours(thrshed,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
area = [0]
for cnt in contours:
#Contour area is taken
area.append(cv2.contourArea(cnt))
return max(area)
Я создал аналогичные функции для красного и зеленого с диапазонами цветов HSV, как показано ниже.
Green:
lower_green = [65,60,60])
upper_green = [80,255,255]
Red:
lower_red = [170,120,70]
upper_red = [180,255,255]
Теперь я пытаюсь сделать То же самое для всех цветов VIBGYOR, но я не получаю надлежащие цветовые диапазоны для всех этих. Я попытался преобразовать код RGB в HSV, используя этот код python.
import colorsys
def rgb_hsv_converter(rgb):
(r,g,b) = rgb_normalizer(rgb)
hsv = colorsys.rgb_to_hsv(r,g,b)
(h,s,v) = hsv_normalizer(hsv)
upper_band = [h+10, s+40, v+40]
lower_band = [h-10, s-40, v-40]
return {
'upper_band': upper_band,
'lower_band': lower_band
}
def rgb_normalizer(rgb):
(r,g,b) = rgb
return (r/255, g/255, b/255)
def hsv_normalizer(hsv):
(h,s,v) = hsv
return (h*360, s*255, v*255)
rgb_hsv_converter((255,255,255))
Но эти диапазоны не работали должным образом при тестировании. Я много искал, чтобы найти лучшие диапазоны HSV для всех этих цветов, но безрезультатно. Кто-нибудь может предложить какой-либо подход, чтобы найти лучшие и более точные цветовые диапазоны для многих цветов .?