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 :

Problème avec cvStereoRectifyUncalibrated


Sujet :

OpenCV

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Problème avec cvStereoRectifyUncalibrated
    Apres cvStereoRectify j'ai encore un problème cette fois ci avec cvStereoRectifyUncalibrated

    voici le code :
    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
    36
    37
     
     
            CvSize size_ut = cvSize(640,480);
            CvMat* fundamental_ext =cvCreateMat(3,3,CV_64F);
    	CvMat* point_image_g   = (CvMat*)cvLoad( "point_image_g.xml" ); 
    	CvMat* point_image_d   = (CvMat*)cvLoad( "point_image_d.xml" );
     
            CvMat* homography_matrix_g = cvCreateMat(3,3,CV_64F);
    	CvMat* homography_matrix_d = cvCreateMat(3,3,CV_64F);
     
            //pour transformer mes deux matrices de points de float à double
    	double tabgauche[240][2];
    	double tabdroite[240][2];
    	int i,j;
    	double t,y;
    	for(i=0 ; i<240;i++){
    		for(j=0;j<2;j++){
    			t=cvmGet(point_image_g,i,j);
    			tabgauche[i][j]=t;
    			y=cvmGet(point_image_d,i,j);
    			tabdroite[i][j]=y;
    		}
    	}
    	cvInitMatHeader(point_image_new_g, 240, 2, CV_64F, tabgauche);
    	cvInitMatHeader(point_image_new_d, 240, 2, CV_64F, tabdroite);
     
     
    	cvSave("new_point_g.xml",point_image_new_g);
    	cvSave("new_point_d.xml",point_image_new_d);
     
     
            cvFindFundamentalMat(point_image_g,point_image_d,fundamental_ext);
    	cvSave( "fundamental_ext.xml",fundamental_ext);
     
     
     
    	cvStereoRectifyUncalibrated(point_image_new_g,point_image_new_d,fundamental_ext,size_ut,homography_matrix_g,homography_matrix_d);

    le programme compile bien et quand je l'execute il s'arrete à cvStereoRectifyUncalibrated et m'affiche dans la console ce message d'erreur :
    CV_ASSERT( CV_IS_MAT(_points1) && CV_IS_MAT(_points2) &&
    (_points1->rows == 1 || _points1->cols == 1) &&
    (_points2->rows == 1 || _points2->cols == 1) &&
    CV_ARE_SIZES_EQ(_points1, _points2) failed ) in cvStereoCalcHomographiesFromF file .\cvcalibration.cpp, line2477


    ça à l'air de venir d'un problème de taille de mes deux matrices de points pourtant elles font toutes les deux la même taille???

    Avez vous déja rencontré ce problème??
    Merci de votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    la déclaration des deux matrices donne quoi ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Ah oui mince j'ai oublié de la mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CvMat* point_image_new_g = cvCreateMat(2,240,CV_64F);
    	CvMat* point_image_new_d = cvCreateMat(2,240,CV_64F);
    Mais quand je regarde le fichier xml elles sont bien remplis avec les valeurs de point_image_g et point_image_d mais en double...

    Merci de ton aide !

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CvMat* point_image_new_g ;
    CvMat* point_image_new_d ;
    déclare les juste comme ca, initmatheader devrait se charger du reste

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Ok j'essaie merci

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Aie apparament initMatHeader ne joue pas entièrement son role car j'obtiens l'erreur : Run-Time Check Failure #3 The variable 'point_image_new_g' is being used without being initialized

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CvMat point_image_new_g ;
    CvMat point_image_new_d ;
     
     
    cvInitMatHeader(&point_image_new_g, 240, 2, CV_64F, tabgauche);
    cvInitMatHeader(&point_image_new_d, 240, 2, CV_64F, tabdroite);
    petite erreur avec le type ^^

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Pfou j'essaie dans tous les sens mais ca me met toujours la même erreur...J'y suis allé tout doucement au debugueur et le problème semble venir de la taille de mes deux matrices point_image_new_d et point_image_new_g... mais elles font la même taille !!!

    J'en ai marre

    est -ce que quelqu'un a déja utilisé cette fonction et comment l'avez vous utilisé???

    Merci d'avance

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    poste tes 2 xml stp

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Merci de m'aider snowpy (et d'en aider beaucoup d'autre aussi) j'ai fais ce que tu as dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CvMat point_image_new_g ;
    CvMat point_image_new_d ;
     
     
    cvInitMatHeader(&point_image_new_g, 240, 2, CV_64F, tabgauche);
    cvInitMatHeader(&point_image_new_d, 240, 2, CV_64F, tabdroite);
    ca a rien changé

    voici les deux xml :


    http://up.sur-la-toile.com/sBDa]new_point_d.xml

    http://up.sur-la-toile.com/sBDb]new_point_g.xml

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    tu peux poster les xml original point_image_g.xml et point_image_d.xml
    parce que la j'en ai un en 240,2 et l'autre en 3,4 donc normal qu'il apprécie pas

    ah ben non les deux sont bien en 240,2 mais après la conversion on se retrouve avec du 3,4 donc on doit faire un truc qui faut pas ^^

    edit: oups mon initheader était pas bon ^^ j'ai rien dit

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    c'est étrange ?? moi quand je télécharge les deux que je t'ai envoyé je vois bien 240 rows et 2 cols pour les deux fichiers...

    voila les deux originaux :

    http://up.sur-la-toile.com/sBDe]point_image_d.xml

    http://up.sur-la-toile.com/sBDf]point_image_g.xml

    lequel vois tu à 3 , 4?

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    les deux que je t'ai envoyé en premier sont après la conversion en double ce sont : new_image_g et new_image_d

    et les deux deux que je viens d'envoyer dans le post précédent sont ceux de départ en float : image_point_g et image_point_d

    les 4 fichiers pour moi sont en 2 , 240...

    tu les vois comment?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    escuse moi les 4 sont en 240, 2 et non pas 2 , 240...autant pour moi

  15. #15
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    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
    36
    37
    38
     
    CvMat* fundamental_ext =cvCreateMat(3,3,CV_64F);
       CvMat* point_image_g   = (CvMat*)cvLoad( "point_image_g.xml" ); 
       CvMat* point_image_d   = (CvMat*)cvLoad( "point_image_d.xml" );
     
       CvMat* homography_matrix_g = cvCreateMat(3,3,CV_64F);
       CvMat* homography_matrix_d = cvCreateMat(3,3,CV_64F);
     
       CvMat point_image_new_g ;
       CvMat point_image_new_d ;
     
    	double pointimgG[480] ;
    	double pointimgD[480] ;
     
    	int i,j;
    	double t,y;
    	for(i=0 ; i<240;i++){
    		for(j=0;j<2;j++){
    			t=cvmGet(point_image_g,i,j);
    			pointimgG[i*j]=t;
    			y=cvmGet(point_image_d,i,j);
    			pointimgD[i*j]=y;
    		}
    	}
     
       cvInitMatHeader(&point_image_new_g, 480, 1, CV_64F, pointimgG);
       cvInitMatHeader(&point_image_new_d, 480, 1, CV_64F, pointimgD);
     
       cvSave("new_point_g.xml",&point_image_new_g);
    	cvSave("new_point_d.xml",&point_image_new_d);
     
    	cvFindFundamentalMat(point_image_g,point_image_d,fundamental_ext);
    	cvSave( "fundamental_ext.xml",fundamental_ext);
     
     
    	/*printf("%d",(&point_image_new_d)->cols));
    	printf("%d",(&point_image_new_g)->cols));*/
    	cvStereoRectifyUncalibrated(&point_image_new_g,&point_image_new_d,fundamental_ext,size_ut,homography_matrix_g,homography_matrix_d);
    tes points sont issue d'une image sur 3 channels or pour 3 channels tu dois utiliser une seul colonne ou une seul ligne au choix
    1xN or Nx1 2- or 3-channel array

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    ah!!!! il n'y a plus d'erreur du programme!!

    Par contre les deux matrices new_point_g et new_point_d n'ont pas du tout les même valeurs que les matrices point_image_g, et point_image_d ...

    Est ce que c'est normal??

    En tout cas merci beaucoup

  17. #17
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    je pense pas que ca soit normal

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    oui surtout que mes deux matrices homographies sont à 0 à la sortie...

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    j'ai changé la boucle for qui allait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int i,j;
    	int k=0;
    	double t,y;
    	for(i=0 ; i<240;i++){
    		for(j=0;j<2;j++){
    			t=cvmGet(point_image_g,i,j);
    			tabgauche[k]=t;
    			y=cvmGet(point_image_d,i,j);
    			tabdroite[k]=y;
    			k++;
    		}
    	}

    maintenant j'ai bien les même matrices mais en double au lieu de float.

    et homographies ne sont plus nuls!!!

    Merci beaucoup snowpy

    Je crois que je peux mettre résolu

    allons maintenant à l'encontre de nouveaux problèmes

  20. #20
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    hum j'ai fait des bêtises donc ca marche mais c'est faux ^^

    ta matrice correspond au coordonné d'un pixel sur une image et sur l'autre non ?

    edit: vérifie bien que le résultat est celui attendu

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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