OpenCV заполнение нулями - PullRequest
2 голосов
/ 15 марта 2011

Я использую cvFilter2D для фильтрации изображений.В документации написано:

Когда апертура частично находится вне изображения, функция интерполирует значения пикселей выбросов из ближайших пикселей, находящихся внутри изображения.

Несмотря на то, что в большинстве случаев такая экстраполяция в порядке, я хочу обработать такие значения пикселей выброса с помощью заполнение нулями (вот пример 1D того, что это значит).

Вот способ, которым я сейчас занимаюсь:

def do_filter(im, filt):
    N, M = cv.GetSize(filt)
    _, _, width, height = cv.GetImageROI(im)
    padded = cv.CreateImage((width + N, height + M), im.depth, im.nChannels)
    cv.SetZero(padded)
    roi = (N/2, M/2, width, height)
    cv.SetImageROI(padded, roi)
    cv.Copy(im, padded)
    cv.ResetImageROI(padded)
    cv.Filter2D(padded, padded, filt)
    result = cv.CreateImage(cv.GetSize(im), im.depth, im.nChannels)
    cv.SetImageROI(padded, roi)
    cv.Copy(padded, result)
    return result

В основном:

  • Создание дополненного изображения и копирование содержимого из ввода
  • Фильтр
  • Обрезать мягкие области

Мне это не нравится, потому что мне приходится много работать, просто перемещая пиксели вокруг.Это медленно.

Есть ли лучший способ сделать заполнение нулями при фильтрации?

РЕДАКТИРОВАТЬ

Я нашел cvCopyMakeBorder немного чище, но все же копирует изображение и, следовательно, медленно.

РЕДАКТИРОВАТЬ 2

cv :: filter2D в C ++API это делает.Я хотел бы знать, имеет ли где-то старый API C такую ​​же функциональность (я не могу получить доступ к API C ++ из Python, но могу получить доступ к API C из Python).

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Если вы не возражаете против потери внешнего края изображения толщиной 1 пиксель, вы можете установить его на 0, и тогда «интерполяция» даст вам то, что вы хотите.

1 голос
/ 15 марта 2011

Я не уверен насчет Python, но в C / C ++ вы можете указать, что хотите, чтобы определенная константа использовалась для «неопределенных» пикселей.Установите эту константу равной 0, и ваша проблема будет решена.Я уверен, что в Python тоже есть что-то похожее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...