Как установить диапазон цветов HSV в OpenCV?

У меня есть телефон, и его гистограмма HSV похожа на удар, и я хочу отслеживать движение этого телефона. Основываясь на его гистограмме, я установил диапазон изображения следующим образом:

greenLower = (300, 0, 50)
greenUpper = (50, 128,250 )
cv2.inRange(hsv, greenLower, greenUpper)

Но при размахе телефона ничего не обнаруживалось, и я уверен, что это из-за неправильной цветовой гаммы. Скажите, пожалуйста, как правильно настроить цветовой диапазон? Pecially Особенно, если значения HUE находятся между [300~50], следует ли мне установите его на (50~300) или (300~50), потому что HUE - это круг.

Phone

Телефон

HSV histogram:

Гистограмма ВПГ

1 ответ

Решение

Вы неправильно установили верхнюю и нижнюю границы, они должны быть:

greenLower = (50, 0, 50)         # Previously (300, 0, 50)
greenUpper = (300, 128, 250)     # Previously (50, 128,250)

Также убедитесь, что hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) как OpenCV следует BGR условность.

РЕДАКТИРОВАТЬ:

Чтобы сегментировать цвета в нескольких диапазонах 0~50 а также 300~359Вы можете выполнить cv2.inRange() дважды для двух диапазонов как:

greenLower1 = (0, 0, 20)         
greenUpper1 = (50, 128, 100)     

greenLower2 = (300, 0, 20)         
greenUpper2 = (359, 128, 100)     

mask1 = cv2.inRange(img_hsv, greenLower1, greenUpper1)
mask2 = cv2.inRange(img_hsv, greenLower2, greenUpper2)

mask = cv2.max(mask1, mask2)
Другие вопросы по тегам