Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Найти range одного цвета на изображении

Не получается найти range одного цвета на изображении. Пример изображения:

import cv2 import numpy as np
img = cv2.imread('image.png')
# RGB: 77, 82, 89 hsv_min = np.array([215, 13, 34], np.uint8) # <- HSV # RGB: 32, 40, 49 hsv_max = np.array([212, 35, 20], np.uint8) # <- HSV
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
result = cv2.inRange(hsv_img, hsv_min, hsv_max) cv2.imwrite('output.png', result)
output:

Нужно найти цвет, который находится в круге слева вверху. Брал пипеткой у края самый яркий цвет и из центра самый темный, пытался найти его - не выходит. Изменял значения min range на 0.8 и max на 1.2 от исходных значений - то же самое. Много всего перепробовал.
Как все-таки это работает? Как можно найти только нужный цвет на изображении?


Ответ

По координатам центра круга мы можем найти искомый цвет в HSV:
In [116]: hsv_pt = hsv_img[25,25]
In [117]: hsv_pt Out[117]: array([106, 88, 49], dtype=uint8)
теперь попробуем ваш код с "правильным" диапазоном цветов:
hsv_min = (hsv_pt * 0.95).astype('uint8') hsv_max = (hsv_pt * 1.05).astype('uint8')
result = cv2.inRange(hsv_img, hsv_min, hsv_max)
cv2.imwrite('d:/temp/output.png', result)
Результат:

Комментариев нет:

Отправить комментарий