Как установить диапазон цветов 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)