Opencv floodFill: Как мне преобразовать изображение в маску координат?

я использую floodFill на моем приложении для Android. Функция Opencv заливки изменяет маску входного изображения.

public static int floodFill(Mat image,
Mat mask,
Point seedPoint,
Scalar newVal,
Rect rect,
Scalar loDiff,
Scalar upDiff,
int flags)

Я прочитал использование этой функции от Вот. В документации сказано, что

Рабочая маска, которая должна представлять собой одноканальное 8-битное изображение, на 2 пикселя шире и на 2 пикселя выше изображения.

а также

Примечание. Поскольку маска больше заполненного изображения, пиксель (x, y) на изображении соответствует пикселю (x + 1, y + 1) в маске.

Но я думаю, что если я хочу получить доступ к (x, y), я использую (x + 2, y + 2). Я ошибся?

1

Решение

Вы должны доверять документации! (Ну, большую часть времени … 🙂

Маска на 2 пикселя шире и выше входного изображения, но одна полоса пикселей используется в верхней / левой части изображения, а другая — в нижней / правой части изображения.

Как вы правильно сказали, во время заливки все координаты inputImage переводятся в координаты маски суммированием (1,1).

Например, при достижении любой точки у левого края изображения, расположенного в координатах x = 0, y = y0алгоритм проверит в маске 8 точек с центром вокруг координат x = 1, y = y0 + 1, который включает в себя точку x = 0, y = y0 + 1 (сразу слева). Если бы вы не суммировали 1, вы бы вышли за границы изображения.

При достижении правого края изображения, расположенного в координатах x = inputImage.cols -1, y = y0алгоритм проверит в маске 8 точек с центром вокруг координат x = inputImage.cols, y = y0 + 1, который включает в себя точку x = inputImage.cols + 1, y = y0 + 1 (сразу справа). Если ваша маска не будет на 2 пикселя шире исходного изображения, вы выйдете за границы изображения.

Вот почему вам нужно изображение маски на 2 пикселя шире, чем входное изображение, при суммировании (1,1) для преобразования из изображения в координаты маски.

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

Примечание: соображения те же, если вы используете 4 соседства вместо 8 соседей.

1

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


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