Контуры / линии заполнения зазоров

У меня есть следующее изображение:

Изображение с горизонтальными контурами

и я хотел бы заполнить его контуры (т.е. я хотел бы заполнить пробелы на этом изображении).

Я пробовал морфологическое закрытие, но использование прямоугольного ядра размером 3x3 с 10 итерациями не заполняет всю границу. Я также попробовал ядро 21x21 с 1 итерацией, а также не повезло.

ОБНОВИТЬ:

Я пробовал это в OpenCV (Python), используя:

 cv2.morphologyEx(img, cv2.MORPH_CLOSE, cv2.getStructuringElement(cv2.MORPH_RECT, (21,21))) 

а также

 cv2.morphologyEx(img, cv2.MORPH_CLOSE, cv2.getStructuringElement(cv2.MORPH_RECT, (3,3)), iterations=10) 

и scikit-образ :

 closing(img, square(21)) 

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

  • Вырезание одного изображения на несколько изображений с использованием библиотеки изображений Python
  • One Solution collect form web for “Контуры / линии заполнения зазоров”

    В следующем фрагменте я вычисляю карту расстояния прообраза. Я порою его, чтобы получить большой контур текущего объекта, который затем скелетонизирую, чтобы получить центральную линию. Этого может быть достаточно для ваших целей. Но чтобы он соответствовал заданной толщине линии, я расширяю скелет и добавляю его к оригиналу, тем самым закрывая любые промежутки. Я также удаляю один оставшийся объект, касающийся границы.

    учесть разрыв

     from skimage import io, morphology, img_as_bool, segmentation from scipy import ndimage as ndi import matplotlib.pyplot as plt image = img_as_bool(io.imread('/tmp/gaps.png')) out = ndi.distance_transform_edt(~image) out = out < 0.05 * out.max() out = morphology.skeletonize(out) out = morphology.binary_dilation(out, morphology.selem.disk(1)) out = segmentation.clear_border(out) out = out | image plt.imshow(out, cmap='gray') plt.imsave('/tmp/gaps_filled.png', out, cmap='gray') plt.show() 
    Python - лучший язык программирования в мире.