Приклад зміни кольорів при переході простору HSV:
В OрenCV шкали каналів змінюються у таких діапазонах- H: 0--179
- S: 0--255
- V: 0--255
Для того щоб провести сегментацію зображення за конкретним кольором або кількома кольорами, спочатку потрібно визначити його діапазон, тобто виділити межі області у HSV-циліндрі . Наприклад, жовтий колір знаходиться в діапазоні $H=[25,33]$ при значеннях $S=[50,100]$ і значеннях $V=[150,255]$.
Аналогічно шукаються діапазони каналу H для інших кольорів, а діапазони для каналів S i V можна залишити такими як вище. Наприклад для зеленого кольору канал H змінюється приблизно в діапазоні від $50$ до $90$. В загальному випадку діапазони кольоів можна визначити в інтерактивному режимі, код тут.Білий колір визначається так
lower_white = np.array([0,0,0], dtype=np.uint8)
upper_white = np.array([0,0,255], dtype=np.uint8)
Чорний колір визначається нульовим значенням каналу V.
Для сегментації за кольоровим діапазоном потрібно перевести зображення у HSV простір, визначити діапазон кольору, створити маску і накласти її на початкове $BGR$-зображення
hsv_image = cv2.cvtColor(img ,cv2.COLOR_BGR2HSV)
lower_yellow = np.array([15, 50, 150])
upper_yellow = np.array([33, 255, 255])
y_mask = cv2.inRange(hsv_image , lower_yellow , upper_yellow)
filtered_image = cv2.bitwise_and(img , img , mask=y_mask)
Виділення об'єктів оранжевого і жовтого кольорів
При сегментації за кількома кольорами, їхні маски додаються для створення спільної маски.
Немає коментарів:
Дописати коментар