Меня вдохновил следующий сообщение в блоге, однако я я борюсь с шагом 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
рисую. В результате бинарное пороговое значение основано на солнечной части в верхнем левом углу, а не на белых линиях вокруг футбольного поля.
Следуя методологии из учебников Я получаю следующий вывод для простого порогового значения:
и адаптивный порог:
и, наконец, пороговое значение Оцу:
Как сделать так, чтобы белые линии стали более заметными? Я думал об кадрировании кадра, чтобы видеть только поле, а затем использовать маску на основе белого цвета. Это не сработало, к сожалению.
Помощь очень ценится,