OpenCV заполнить отверстия в контурах - PullRequest
0 голосов
/ 10 ноября 2019

То, что я пытаюсь сделать, в основном такое же, как эрозия / расширение, но вместо изображения у меня есть контуры. Таким образом, я пытаюсь заполнить дырочные отступы в контурах. (см. изображение ниже - контуры нарисованы красным; РЕДАКТИРОВАТЬ: я нарисовал их заполненными, чтобы показать, что снаружи, а что внутри)

holes in contours

Iя знаю о приближениях, которые я уже использую, но если я приму это более высокое значение, детали в других местах будут потеряны.

Поэтому мне было интересно, есть ли функции, аналогичные эродирующим / расширяющим, или еслиЯ должен сгенерировать изображение из контуров, которые затем я могу использовать, чтобы сделать именно это или что-то подобное.

РЕДАКТИРОВАТЬ: В настоящее время у меня есть:

  • обнаружение контуров в двоичном видеimage: contours = cv2.findContours(im, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1)[0]
  • приблизительные контуры: approxConts = [cv2.approxPolyDP(contour, 0.002*cv2.arcLength(contour, True), True) for cont in contours] (0,002 - это хорошее значение для моего варианта использования в целом, более высокие значения вызывают потерю деталей)

Что я сейчасхочу сделать что-то вроде cv2.erode(cv2.dilate(contour, someKernel), someKernel), что, очевидно, не работает, поскольку контуры не являются изображением. Поэтому мне нужна похожая функция, которая увеличивает контуры, удаляет линии, которые пересекают друг друга, и вместо этого использует только точку пересечения, а затем снова сокращает контуры. Я хочу получить что-то вроде этого:

filled holes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...