Я застрял на этом несколько дней, может быть, кто-то сможет мне помочь здесь.Проблема с режимом пограничного режима OpenCV с фильтром размытия
Я использую API OpenCV C++ для выполнения некоторой базовой обработки изображений. У меня есть шаг, где я хочу, чтобы размыть мое изображение и указать BORDER_WRAP
как мой тип границы:
cv::blur(img, img, cv::Size(3, 3), cv::Point(-1, -1), cv::BORDER_WRAP);
Но при выполнении моего кода, я получаю следующее сообщение об ошибке:
OpenCV Error: Assertion failed (columnBorderType != BORDER_WRAP)
Однако, все работает нормально при использовании других типов границ, (BORDER_REFLECT
, например), но мне нужно BORDER_WRAP
вещи, кажется, работает, если я использую copyMakeBorder(img, img, 1, 1, 1, 1, cv::BORDER_WRAP)
первый на моем изображении, размытие это новое изображение, а затем обрезать его обратно к размеру т он оригинальный, но все же я не могу понять, почему моя первая попытка не работает.
Кто-нибудь знает, как я могу это решить?
поэтому, если функция/фильтр разрешает пограничные режимы напрямую, они не вызывают copyMakeBorder внутри, но используют режим границы неявно (и, следовательно, более эффективно)? – Micka
@ Micka Я считаю, что встроенные фильтры opencv просто испускают ошибку утверждения Ошибка (как в этом случае) для тех конкретных режимов границы, которые не поддерживаются. Тогда вам решать (или любой сторонний разработчик библиотеки) решить, хотят ли они неявно вызывать cv :: copyMakeBorder или какую-то другую функцию в качестве работы. –
no Я имел в виду, если какой-либо тип границы IS поддерживается фильтром, будет ли фильтр применять границу неявно, не копируя изображение и не добавляя границу явно? – Micka