Установка типа границы для функции opencv c ++: erode ()

Мне нужно применить функции OpenCV dilate() а также erode() к Mat объект, который на самом деле является ROI в большем изображении. Mat roiImg создается путем создания заголовка для ROI внутри исходного изображения img:

Mat img = imread(...);
Mat roiImg = img (Rect(...));

Это список аргументов для erode():

void erode(InputArray src, OutputArray dst, InputArray kernel, Pointanchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )

Проблема в том, что, поскольку мое входное изображение для функций разрушает / расширяет заголовок для ROI, кажется, что выбор BORDER_CONSTANT в качестве типа границы вместе со значением границы, равным morphologyDefaultBorderValue() не оказывает никакого влияния, и значения границ получены из исходного изображения.

Тогда я нашел это в документации для copyMakeBorder():

Когда исходное изображение является частью (ROI) большего изображения, функция будет пытаться использовать пиксели вне области ROI для формирования границы. Чтобы отключить эту функцию и всегда делать экстраполяцию, как будто src не был ROI, используйте borderType | BORDER_ISOLATED,

Тем не мение, cv::borderInterpolate() которая является функцией, вызываемой изнутри erode() функция, не принимает BORDER_ISOLATED как допустимый тип границы!

На данный момент, чтобы обойти эту проблему, я должен клонировать roiImg, а затем позвоните erode(), Но в идеале я не хочу накладных расходов на клонирование. Есть ли способ обойти это?

2

Решение

Это похоже на известная ошибка в OpenCV. Пока это не исправлено, клонирование может быть лучшим обходным путем.

1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector