Python — OpenCV FloodFill с несколькими семенами

Есть ли функция заливки для python / openCV, которая берет список семян и начинает менять цвет своих соседей? Я знаю, что SimpleCV как функция, как это SimpleCV floodFill. OpenCV говорит, что у него есть две функции floodFill, когда он использует маску, и еще одну, которая не документация, Я не могу использовать функцию opencv floodfill без маски и со списком семян. Любая помощь?

Это то, что я пытаюсь сделать до сих пор:

A=array([[0,1,1,0],[0,0,0,0],[1,1,1,1],[1,1,1,1]],np.uint8)
mask = np.ones((A.shape[0]+2,A.shape[0]+2),np.uint8)
mask[1:-1,1:-1] = np.zeros((A.shape))
cv.floodFill(A, mask, (3,0), 0,0,0,  flags=4|cv.FLOODFILL_MASK_ONLY)
print mask

возвращенная маска:

[[1 1 1 1 1 1]
[1 1 0 0 1 1]
[1 1 1 1 1 1]
[1 0 0 0 0 1]
[1 0 0 0 0 1]
[1 1 1 1 1 1]]

Ожидаемая маска:

[[1 1 1 1 1 1]
[1 0 0 0 0 1]
[1 0 0 0 0 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]]

Исходное изображение:

[[0 1 1 0]
[0 0 0 0]
[1 1 1 1]
[1 1 1 1]]

3

Решение

Если вы внимательно посмотрите на документацию, это одна из целей маски. Вы можете вызывать функцию несколько раз (2-я версия) каждый раз с другим начальным числом, и в конце маска будет содержать заполненную область. Если новое начальное число принадлежит области, уже заполненной, ваш вызов функции немедленно вернется.

Используйте флаг FLOODFILL_MASK_ONLY, а затем используйте эту маску, чтобы закрасить исходное изображение желаемым цветом заливки в конце с помощью установлен в() (Вам нужно будет использовать образ Маски! Удаление первого и последнего ряда и столбца). Обратите внимание, что ваша заливка может привести к различным результатам в зависимости от порядка обработки точек посева, если вы установите loDiff или же upDiff к чему-то другому, чем значение по умолчанию ноль.

Взгляните также на этот.

2

Другие решения


По вопросам рекламы [email protected]