OpenCV Erreur: échec de l'Assertion, mat.cpp ligne 537
http://pastebin.com/5ZeMvm2C est mon fichier d'en-tête dans mon projet.
Il y a un squelette.à(axe des y,xaxis+1) à la ligne 249. Quand je tape ce code dans mon projet, j'ai cette erreur:
**OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si
ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel
s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3
) - 1))*4) & 15) == elemSize1()) in unknown function, file c:\opencv\build\inclu
de\opencv2\core\mat.hpp, line 537**
//mat.cpp line 537 is:
template<typename _Tp> inline _Tp& Mat::at(int i0, int i1)
{
CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] &&
(unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&
CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());
return ((_Tp*)(data + step.p[0]*i0))[i1];
}
Quel est le problème?
http://pastebin.com/gqJ5RpBU est aussi mon .fichier cpp.
OriginalL'auteur user2923864 | 2013-11-26
Vous devez vous connecter pour publier un commentaire.
Que le message d'erreur dit, vous avez un OpenCV d'exécution affirmation qui est en échec.
Comme vous l'avez écrit dans votre question, l'échec de l'assertion est à l'intérieur de la
Mat::
fonction.Vous devez trouver dans votre code à l'appel (ou les appels) de
Mat::at
qui vous donnent l'erreur.Comme vous pouvez le voir à la OpenCV page d'aide
Mat::at
est une fonction de modèle avec une, deux ou trois arguments, l'échec de l'assertion peut avoir des causes diverses:template<typename T> T& Mat::at(int i, int j)
,i
est censé être entre0
et le nombre de lignes moins un,j
est censé être entre0
et le nombre de colonnes moins un. Si vous avez une image avec 100 lignes et vous demandez à un élément à la ligne 101 de l'assertion échoue. Tout-en-un d'erreurs sont fréquents dans ce cas.Pour être plus précis, l'échec de l'assertion, car au moins un des éléments suivants
bool
s estfalse
:dims <= 2
data
(unsigned)i0 < (unsigned)size.p[0]
(unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels())
CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1())
Ci-dessus
bool
s sont significatives à l'intérieur de la portée deMat
classe.En outre, veuillez noter que l'aide est dit que:
et donc dans votre configuration de Version, vous n'aurez pas l'échec de l'assertion, mais probablement un accident quelque part.
À partir de la source que vous avez lié, il me semble que vous êtes sur Windows, si c'est vrai, et si vous avez Visual Studio, je vous propose de réaliser OpenCV à partir du code source, de mettre un point d'arrêt à l'intérieur de
Mat::at
puis pour déboguer votre code afin de voir ce que le précédentbool
s estfalse
.data
,dims
, taille.p[0] ,... de sorte que vous pouvez trouver la valeur est à l'origine de l'erreurOriginalL'auteur Alessandro Jacopson
Mat::at()
méthode a été mise en œuvre comme un modèle, vous devez connaître le type de l'image avant de vous servir de la fonction.vérifier les canaux de l'image.
pour un seul canal de l'image(8UC1), vous devez manipuler les pixels de l'image comme dans:
pour les trois canaux de couleur de l'image(8UC3), vous devez utiliser la fonction comme dans:
si le canal n'est pas un problème, vous devriez vérifier les arguments de la
at(i, j)
, je vous présente la ligne, j présenter le col. en d'autres mots, je l'égalité de Point.y, j égal à Point.x.OriginalL'auteur oscarwin