#python #scikit-image #flood-fill
#python #scikit-image #заливка-fill
Вопрос:
Это мой код для заливки моего изображения потоком, поэтому я хочу, чтобы было только внешнее пространство, которое получило значение цвета 50, но вместо этого все выделено серым цветом.
checkers = invert(cv2.imread('skeleton2.jpg',cv2.IMREAD_GRAYSCALE))
filled_checkers = flood_fill(checkers, (0, 0),50,tolerance=1)
fig, ax = plt.subplots(ncols=2, figsize=(10, 5))
ax[0].imshow(checkers, cmap=plt.cm.gray, vmin=0, vmax=255)
ax[0].set_title('Original')
ax[1].imshow(filled_checkers, cmap=plt.cm.gray, vmin=0, vmax=255)
ax[1].set_title('After flood fill')
plt.show()
Чего я хочу https://i.stack.imgur.com/WuQAO.jpg
Что я получаю https://i.stack.imgur.com/P2pd0.jpg
Комментарии:
1. Используемая вами реализация заливки потоком, по-видимому, учитывает, что окрестности пикселя равны восьми другим пикселям, включая диагональные. Из-за линий шириной в один пиксель на вашем исходном изображении поток может «просачиваться» по диагонали между пикселями в наклонных областях линий. Вместо этого вы хотите заполнить окрестности размером в 4 пикселя. Я не вижу такой опции в skimage, но у cv2
FloodFill()
естьflags
параметр, который может указать это.2. спасибо, это очень полезно. я думаю, что вместо этого я использую реализацию cv2
3. Параметр существует в scikit-image и вызывается
connectivity
. Мы используем этот параметр (1-, 2-, …, ndim-связность), а не 4/8-соседство, потому что он подходит для 3D-изображений и выше.
Ответ №1:
Вам нужно передать connectivity=1
в качестве параметра. Смотрите документацию для заливки потоком:
выбираем: ndarray, необязательно
Элемент структурирования, используемый для определения окрестности каждого оцениваемого пикселя. Оно должно содержать только единицы и 0, иметь то же количество измерений, что и изображение. Если не указано, все соседние пиксели рассматриваются как часть окрестности (полностью соединенные).
подключение: int, необязательно
Число, используемое для определения окрестности каждого оцениваемого пикселя. Соседними считаются пиксели, квадрат расстояния которых от центра меньше или равен соединяемости. Игнорируется, если selem не равен None.
Раздел примеров в docstring также содержит примеры, объясняющие возможность подключения.
Комментарии:
1. Так рад, что нашел ваш ответ, поскольку в нем рассматривается проблема заполнения, распространяющегося через диагональные пробелы. Что не сразу было очевидно для меня из чтения документов. Приветствия