У меня есть видео с белыми линиями на баскетбольном поле. Пример изображения: 1
, и я хотел бы убрать только белые линии и заполнить как можно больше, а остальные шумы убрать. Теперь, после многих попыток, я получаю: 2
Для очистки всего остального, кроме белого (потому что для меня это лучший результат, когда только белый цвет не работал):
low = np.array([0, 42, 0])
high = np.array([179, 255, 255])
mask = cv2.inRange(frame, low, high)
и второй и лучший результат после использования Floodfill: 3 код:
im_in = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
th, im_th = cv.threshold(im_in, 220, 255, cv.THRESH_BINARY_INV)
im_floodfill = im_th.copy()
h, w = im_th.shape[:2]
mask2 = np.zeros((h + 2, w + 2), np.uint8)
cv2.floodFill(im_floodfill, mask2, (0, 0), 255);
im_floodfill_inv = cv2.bitwise_not(im_floodfill)
im_out = im_th | im_floodfill_inv
Я пробовал скелетирование, морфологическое закрытие и аналогичные функции, но это не то, что мне хотелось бы достигать. Также, может быть, кто-то знает, как лучше всего посчитать размер ширины линии (например, той, которая находится в середине видео / изображения?). Спасибо за помощь!