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 :

OpenCV 2.0a, Visual C++ 2008 et cvAux


Sujet :

OpenCV

  1. #1
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Par défaut OpenCV 2.0a, Visual C++ 2008 et cvAux
    Bonjour,

    Dans le cadre d'un projet, j'utilise openCV pour faire du "view morphing" (interpolation de vue).
    Depuis que Codeblocks m'a laché (minGW ne veut plus compiler automatiquement), j'ai décidé de me mettre a Visual C++ 2008 Express, qui est beaucoup plus adapté, le projet commencant a grandir de toutes facons.
    Après avoir installé (et compilé) OpenCV 2.0a, je suis néamoins face a un probleme qui m'étonne un peu.

    Afin de faire de l'interpolation de vue, j'utilise cvAux pour, après rectification des deux images issues de webcams, calculer les scanlines avant la suite de l'histoire.

    Seulement voila, avec Codeblocks tout marchait a peu pres (les lib minGW etant disponibles dans le package "de base" d openCV), mais en utilisant le debbugger de Visual C++, je me rends compte que le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    longueursDroite = (int*)(malloc( nbScanlines * 2 * 4 * sizeof( int )));;
    longueursGauche = (int*)(malloc( nbScanlines * 2 * 4 * sizeof( int )));;
    scanlinesDroite = (int*)(malloc( nbScanlines * 2 * 4 * sizeof( int )));
    scanlinesGauche = (int*)(malloc( nbScanlines * 2 * 4 * sizeof( int )));
    cvMakeScanlines( &Fond, cvSize( 640, 480 ), scanlinesDroite, scanlinesGauche, longueursDroite, longueursGauche, &nbScanlines );
    (ou Fond est la CvMatrix3 Fondamentale, les images etant en 640*480, et nbScanlines etant bien evidemment le nombre de scanlines forcé à 480) met toujours scanlinesDroit et scanlinesGauche a 0. Et ensuite (forcement), la suite du programme ne marche pas.

    Il me semble que cvAux est en fait un relicat de l'époque ou OpenCV etait developpé par Intel. Aussi aimerai-je savoir si quelqu'un a réussi a le faire marcher "correctement" avec VC++, et s'il y a une quelconque astuce pour le faire marcher.

    Merci d'avance,
    m312

  2. #2
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Par défaut
    Bon en fait je progresse un peu de mon coté.

    Le soucis vient non pas de cvMakeScanlines, mais de la matrice fondamentale.
    Cette dernière est en fait chargée à partir d'un fichier du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0"?>
    <opencv_storage>
    <MatriceFondamentale type_id="opencv-matrix">
      <rows>3</rows>
      <cols>3</cols>
      <dt>d</dt>
      <data>
        6.0686571992020105e-007 -4.2408894673294465e-005
        8.6727772847763670e-003 4.2205614824572940e-005
        1.3463010634106520e-006 -0.0271229876683537 -0.0110030986677198
        0.0280711045109077 0.9999999999999999</data></MatriceFondamentale>
    </opencv_storage>
    Sauf que, pour une raison inconnue, un chargement via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CvMat *Fondamentale = cvCreateMat( 3, 3, CV_64FC1 );
    Fondamentale = (CvMat*)cvLoad("MatriceFondamentale.xml");
    Puis une conversion via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CvMatrix3 Fond;
    for ( int i = 0; i < 3; i++ )
    	for ( int j = 0; j < 3; j++ )
    		Fond.m[i][j] = CV_MAT_ELEM( *Fondamentale, float, i, j);
    met des resultats fantaisistes dans Fond (qui n'ont rien a voir avec le fichier).
    Pour le coup, je peux peut etre incriminer d'etre sur une plateforme x64 ...

    Je poursuis ma recherche...

  3. #3
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Par défaut
    Bon en fait la matrice fondamentale était pas correctement lue lors de la lecture du fichier .xml
    L'astuce que j'ai trouvé pour qu'elle soit correcte est de changer dans le fichier xml la ligne
    en
    Ca vient probablement du fait que je suis sur x64 (ce qui me rassure pas).

    J'ai bien entendu d'autres soucis après, mais j'ai peur qu'ils viennent du 64bits...

    Y'a t il des précautions particulières à prendre pour utiliser openCV sur x64 ?

  4. #4
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 52
    Par défaut
    Mes recherches avancent toujours un peu plus, mais je me retrouve une fois de plus confronté aux problemes de VC++ que je connais pas bien.

    Maintenant c'est a chaque cvPrewarpImage que le programme plante, avec une erreur de violation d'ecriture en mémoire.

    ce qui me fait peur, c'est que c'est le meme probleme que http://www.developpez.net/forums/d63...e/#post3746711 Sauf qu'il n'y a aucun indice.

    J'ai déja essayé de faire quelques bidouilles, pensant que c'est le x64 qui fait merder, du genre changer les int en __int32, mais rien n'y fait ...

    Je poursuis, mais si quelqu'un peut m'aider, c'est mieux!

    EDIT:
    Apparement c'est plus le compilateur Visual C++ et OpenCV qui ne font pas un super ménage...

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/02/2012, 18h49
  2. Visual Studio 2008+OpenCV 2.2: erreur de msvcp100d.dll
    Par jacqui721 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 22/08/2011, 17h51
  3. Réponses: 0
    Dernier message: 01/03/2011, 09h32
  4. Intégration d'OpenCV sous Visual Studio 2008
    Par sousoi dans le forum OpenCV
    Réponses: 2
    Dernier message: 28/06/2010, 11h34
  5. Visual Studio 2008 RTM
    Par The_badger_man dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 24/12/2007, 03h06

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