То, что я пытаюсь сделать, в основном такое же, как эрозия / расширение, но вместо изображения у меня есть контуры. Таким образом, я пытаюсь заполнить дырочные отступы в контурах. (см. изображение ниже - контуры нарисованы красным; РЕДАКТИРОВАТЬ: я нарисовал их заполненными, чтобы показать, что снаружи, а что внутри)
![holes in contours](https://i.stack.imgur.com/VsEus.png)
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](https://i.stack.imgur.com/pPkqH.png)