Функция OpenCV dlate () не закрывает пропуски во всех направлениях - PullRequest
1 голос
/ 30 апреля 2019

Я пытаюсь использовать функцию Python OpenCV cv2.dilate(), чтобы закрыть некоторые пробелы в моем изображении.См. Изображения ниже.

(1) Исходное изображение с зазорами, которые необходимо закрыть.

enter image description here

(2) Расширенное изображение с итерациями = 10

enter image description here

(3) Расширенное изображение с итерациями = 100 и предполагаемыми пробелами, которые должны быть закрыты.

enter image description here

Почему dilate() сохраняет этипробелы?Мне не хватает какой-то конфигурации?

cv2.dilate(thresh, (3,3), iterations=dilate_interations)

1 Ответ

1 голос
/ 30 апреля 2019

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

Это из документации OpenCV :

элемент пикселя равен '1', если хотя бы один пиксель под ядром равен '1'

Это означает, что если ваше ядро ​​слишком маленькое, в нем могут быть пробелываше изображение, где разрыв больше, чем размер ядра в любом направлении.Обратите внимание, что я сгенерировал ядро, используя numpy (я думаю, что вы допустили ошибку при указании вашего ядра).Я протестировал ваш код с ядром (5,5) (вместо (3,3)) и после нескольких итераций он закрыл все пробелы в вашем изображении.Указанный вами (3,3) рассматривается как ядро ​​размера (1,2), а не как ядро ​​размером 3x3:

import numpy as np

kernel = np.ones((5,5),np.uint8)

cv2.dilate(myImage,kernel,iterations = 5)
...