2016-05-19 7 views
1

Я хочу написать программу, чтобы узнать, является ли красный цвет интенсивностью цвета является цвет доминирует. Если интенсивность коричневого цвета больше порога. Затем программа распечатает «Обнаружено».OpenCV: Поиск интенсивности цвета

enter image description here

Например, красный цвет на фото является доминирующим цветом, поэтому программа должна вывести «Обнаружен» !.

я написал нечто вроде этого:

lower_red = np.array([110, 50, 50], dtype=np.uint8) 
upper_red = np.array([130,255,255], dtype=np.uint8) 
mask = cv2.inRange(hsv, lower_red, upper_red) 
res = cv2.bitwise_and(frame,frame, mask= mask) 

Тем не менее, только преобразует цвет изображения, но дает интенсивность. Как я могу получить значение Boolean, что изображение имеет более красный цвет или нет?

ответ

1

Вы должны преобразовать свое изображение в цветовое пространство HSV. В этом пространстве просто выделить красный цвет: красный цвет будет иметь оттенок около [0-10] и [160-180]. Затем вы можете проверить, больше ли отношение красного цвета к порогу.

(pseudocode) 

fun isRedColorGreaterThanThreshold(image, threshold) 
    imageHSV = convertToHSV(image) 
    channels = split(imageHSV) 
    Hue = channels[0] 
    ratio = countNonZero((0 < Hue < 10) or (160 < Hue < 180))/image.total() 

    return ratio > threshold 
+0

В чем смысл "channels = split (imageHSV)"? – VICTOR

+1

«каналы» - это вектор полос, Hue = channels [0], Saturation = channels [1], Value = channels [2], opencv имеет функцию [split] (http://docs.opencv.org/2.4/ modules/core/doc/operations_on_arrays.html # split), который работает таким образом –

+0

Еще один вопрос: в чем смысл «image.total()»? Это общее количество пикселей в изображении? – VICTOR

Смежные вопросы