Я вдохновлен следующим blogpost , однако я борюсь с шагом 2/3. Я хочу создать двоичное изображение из серого изображения, основываясь на пороговых значениях и в конечном итоге отображая все белые линии на изображении. Мой желаемый результат выглядит следующим образом:
Во-первых, я хочу изолировать футбольное поле с помощью цветовых порогов и морфологии.
def isolate_field(img):
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# find green pitch
light_green = np.array([40, 40, 40])
dark_green = np.array([70, 255, 255])
mask = cv2.inRange(hsv, light_green, dark_green)
# removing small noises
kernel = np.ones((5, 5), np.uint8)
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
# apply mask over original frame
return cv2.bitwise_and(frame, frame, mask=opening)
Это дает следующий вывод:
Пока я доволен результатами, но из-за большоготень Я борюсь с обработкой изображения, когда я grayscale
изображение. В результате бинарный порог основан на солнечной части в верхнем левом углу, а не на белых линиях вокруг футбольного поля.
Следуя методике, изложенной в руководствах , я получаю следующий вывод для простой пороговой настройки:
и адаптивный порог:
и, наконец, пороговое значение Оцу:
Как я могу сделать так, чтобы белые линии стали более заметными? Я думал об обрезке кадра, поэтому я вижу только поле и затем использую маску на основе белого цвета. К сожалению, это не сработало.
Помощь очень ценится,