OpenCV fillPoly против расхождения FloodFill - PullRequest
0 голосов
/ 26 февраля 2020

Я не понимаю, почему эти два варианта, по сути, одного и того же, дают мне разные результаты: fillPoly дает правильные результаты, а floodFill - нет.

У меня есть 7-вершинный замкнутый выпуклый многоугольник, который по существу, прямоугольник, расположенный по диагонали на фоне 40000x80000 (строки х столбцы). Мой метод рисования заполненного многоугольника с помощью floodFill состоит в том, чтобы провести l oop через вершины и нарисовать каждую линию ребра с помощью (псевдокод)

for (int i = 0; i < nvert - 1; i++)
    line(canvas, xvert[i], yvert[i], xvert[i+1], yvert[i+1])

со значением ребра 255 и толщиной линии 1. I могу подтвердить, что это dr aws граница именно так, как я ожидаю. Затем я получаю центроид вершин и выполняю заливку с floodFill(canvas, ic, jc). В результате получается полигон, заполненный нижней половиной, но не начинающийся со строки jc. Если я попытаюсь выполнить второй поток заливки, начиная с другой точки, находящейся дальше от полигона, он заполнит только строку точки, которую я пробую.

Когда я запускаю fillPoly (снова псевдокод) с fillPoly(canvas, xvert, yvert, nvert), он отлично заполняет многоугольник на большом холсте.

Разве эти две функции не должны выполнять одно и то же? Очевидно, что что-то мне не хватает с помощью FloFill, но я не могу найти это в документации или в примерах онлайн. Я использую интерфейс C к C ++ OpenCV, поэтому я отправляю такие вещи, как целочисленные массивы, в интерфейсные функции, которые преобразуют все из структур C в необходимые структуры C ++ для использования OpenCV. У меня нет других проблем, связанных с рисованием базовых c с помощью OpenCV.

Может ли большой размер, с которым я имею дело, вызвать проблемы с заливкой? Любая помощь будет принята с благодарностью.

Редактировать: По запросу, хотя и не совсем. Как макет, это то, как выглядит FloodFill, за исключением того, что представьте себе границу в один пиксель толщиной в масштабе 40k x 80k пикселей:

enter image description here

Опять же, в качестве макета это выглядит как fillPoly (те же соображения масштаба):

enter image description here

...