2016-02-17 1 views
1

Je suis coincé là-dessus depuis quelques jours, peut-être que quelqu'un pourra m'aider ici. J'utilise OpenCV C++ API pour effectuer un traitement d'image de base. J'ai une étape où je veux brouiller mon image et spécifiez BORDER_WRAP comme mon type de frontière:Problème de mode de bordure OpenCV avec filtre de flou

cv::blur(img, img, cv::Size(3, 3), cv::Point(-1, -1), cv::BORDER_WRAP); 

Mais lors de l'exécution de mon code, je reçois l'erreur suivante:

OpenCV Error: Assertion failed (columnBorderType != BORDER_WRAP)

Cependant, tout fonctionne bien quand j'utiliser d'autres types de frontières, (BORDER_REFLECT par exemple), mais je dois BORDER_WRAP

les choses semblent fonctionner si j'utilise copyMakeBorder(img, img, 1, 1, 1, 1, cv::BORDER_WRAP) d'abord sur mon image, brouiller cette nouvelle image, puis recadrer revenir à la taille de t Celui d'origine, mais je n'arrive toujours pas à comprendre pourquoi mon premier essai ne fonctionne pas.

Quelqu'un sait comment résoudre ce problème?

Répondre

2

Vous ne pouvez pas faire cela. BORDER_WRAP n'est pas accepté par toutes les fonctions - il est valide seulement pour quelques-uns d'entre eux et, comme l'échec d'assertion le confirme, cv::blur n'en est pas un.

Mais comme vous l'avez déjà découvert, vous pouvez d'abord utiliser cv::copyMakeBorder, de flouter cette nouvelle image et le recadrer à la taille de l'original.

+0

donc si une fonction/filtre permet directement les modes de bordure, ils n'appellent pas copyMakeBorder en interne mais utilisent implicitement le mode frontière (et donc plus efficacement)? – Micka

+0

@Micka Je pense que les filtres opencv intégrés vont simplement émettre une Erreur d'échec d'assertion (comme dans ce cas) pour les modes de bordure particuliers qui ne sont pas supportés. Ensuite, c'est à vous (ou à n'importe quel implémenteur de bibliothèque tiers) de décider s'ils veulent implicitement appeler cv :: copyMakeBorder ou une autre fonction pour contourner le problème. –

+0

non Je voulais dire que si un type de bordure IS est supporté par le filtre, le filtre appliquera-t-il implicitement la bordure, sans copier l'image et sans ajouter explicitement la bordure? – Micka