IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

cvRemap() : Assertion Failed


Sujet :

OpenCV

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut cvRemap() : Assertion Failed
    Bonjour, je suis actuellement en train de travailler avec un système Stéréo Vision et je suis confronté à une erreur lorsque j'utilise cvRemap.

    Voici des bouts de codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    // Constantes
    #define h 480
    #define w 640
     
    IplImage* imgD_temp = cvCreateImage(cvSize(w,h),8,3); // Image originale camera droite
    IplImage* imgG_temp = cvCreateImage(cvSize(w,h),8,3); // Image originale camera gauche
    IplImage* imgD = cvCreateImage(cvSize(w,h),8,3);  // Image corrigee camera droite
    IplImage* imgG = cvCreateImage(cvSize(w,h),8,3);// Image corrigee camera gauche
     
    // Préparation flux vidéo
    CvCapture *camDroite = cvCreateCameraCapture(0);
    cvSetCaptureProperty(camDroite, CV_CAP_PROP_FRAME_WIDTH,640 );
    cvSetCaptureProperty(camDroite, CV_CAP_PROP_FRAME_HEIGHT,480 );
    CvCapture *camGauche = cvCreateCameraCapture(1);
    cvSetCaptureProperty(camGauche, CV_CAP_PROP_FRAME_WIDTH,640 );
    cvSetCaptureProperty(camGauche, CV_CAP_PROP_FRAME_HEIGHT,480 );
     
    CvMat *mxD = (CvMat *)cvLoad("mx2.xml",NULL,NULL,NULL);
    CvMat *myD = (CvMat *)cvLoad("my2.xml",NULL,NULL,NULL);
     
    while(key != 'q' && key != 'Q') // Tant que l'utilisateur n'appuie pas sur Q
    	{
     
    	   cvGrabFrame(camDroite); // On enregistre la capture dans le buffer
    	   cvGrabFrame(camGauche); // On enregistre la capture dans le buffer
     
    	   // On récupère une image
               IplImage *frameD = cvCloneImage(cvRetrieveFrame(camDroite));
               IplImage *frameG = cvCloneImage(cvRetrieveFrame(camGauche));
     
               imgD_temp = cvCloneImage(frameD);
               imgG_temp = cvCloneImage(frameG);
     
               cvRemap(imgD_temp, imgD, mxD, myD);
              }
    Voici le code d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OpenCV Error: Assertion failed (src.type() == dst.type() && dst.size() == mapx.size()) in unknow function, file imgwarp.cpp, line 3247

    Si j'enlève le cvRemap, le code fonctionne.

    Je précise également que les fichiers mxD et myD sont bien de la même taille que mon image, c'est à dire 640*480 et ont été enregistrés lors d'une calibration de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CvMat* mx1 = cvCreateMat(imageSize.height,imageSize.width,CV_32F );
    CvMat* my1 = cvCreateMat( imageSize.height,imageSize.width, CV_32F );
    cvInitUndistortRectifyMap(&_M2,&_D2,&_R2,&_P2,mx2,my2);
    cvSave("mx2.xml",mx2);
    cvSave("my2.xml",my2);
    .

    De plus, si je me réfère au livre Learning OpenCV il est indiqué :
    The first two arguments of cvRemap() are the source and destination images, respectively. Obviously, these should be of the same size and number of channel, but they can have any data type. It is important to note that the two may not be the same image. The next two arguments, mapx and mapy, indicate where any particular pixel is to be relocated.
    These should be the same size as the source and destination images, but they are single-channel and usually of data type float (IPL_DEPTH_32F).
    Si je me réfère à cette explication, j'ai donc bien mon image source et mon image de destination de même dimension (640*480), et ayant le même nombre de channel (3). Aussi, mes mapx et mapy (ici mx2 et my2 sont bien des CV_32F).

    Merci pour votre aide

    Cordialement

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Problème résolu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    imgD = cvCloneImage(frameD);
    imgG = cvCloneImage(frameG);
     
    cvRemap(frameD,imgD,mxD,myD);
    cvRemap(frameG,imgG, mxG, myG);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Debug Assertion Failed ! File: dbgheap.c
    Par jacques_henry dans le forum MFC
    Réponses: 9
    Dernier message: 15/04/2015, 11h29
  2. Assertion Failed à l'éxecution en mode Debug
    Par -=zol=- dans le forum MFC
    Réponses: 4
    Dernier message: 19/04/2007, 11h51
  3. debug assertion failed...
    Par BnY dans le forum MFC
    Réponses: 2
    Dernier message: 18/04/2006, 16h49
  4. Réponses: 4
    Dernier message: 22/11/2005, 17h55
  5. Réponses: 3
    Dernier message: 07/12/2004, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo