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?
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
@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. –
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