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

C++ Discussion :

Vecteur d' IplImage


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut Vecteur d' IplImage
    Bonjour,

    Alors je vais essayer de vous expliquez rapidement la situation. Je dévellope en ce moment une petite application sur VC++ 2005 express, qui doit afficher frame par frame une video dans plusieurs picturebox ( c'est une application Winform ).
    J'utilise par ailleurs la librairie OpenCV, pour le traitement de la video.

    Mon problème est que je doit créer un vecteur, avec toutes les images dedans.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    IplImage* temp;
    IplImage* vector = new IplImage[nbr_frame];
    for(i=1;i<nbr_frame+1;i++)
    {
    	temp=cvQueryFrame(avi); //Recupere une image sous forme IplImage
    	vector[i]=temp;
    }
    Mais j'ai une erreur durant le remplissage du vecteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error C2679: '=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'IplImage *' (ou il n'existe pas de conversion acceptable)

    Need Help !

  2. #2
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    utilise la STL !
    Ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::vector< IplImage > myVector;
    myVector.reserve(nbr_frame);
     
    for( i=1 ;i<nbr_frame+1;i++)
    {
    	myVector.push_back( cvQueryFrame(avi) );
    }

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Désolé de mon ignorance mais je débute seulementen C++, et ce genre de facon de faire me sont un peu inconnue...

    J'ai tenté ta méthode mais voila les erreurs que cela me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    c:\documents and settings\administrateur\bureau\taff\final\videointerface_1.0\videointerface_1.0\Form1.h(514) : error C2039: 'vector' : n'est pas membre de std 
    c:\documents and settings\administrateur\bureau\taff\final\videointerface_1.0\videointerface_1.0\Form1.h(512) : error C2065: 'vector' : identificateur non déclaré
    c:\documents and settings\administrateur\bureau\taff\final\videointerface_1.0\videointerface_1.0\Form1.h(512) : error C2275: 'IplImage' : utilisation non conforme de ce type comme expression
            c:\program files\opencv\cxcore\include\cxtypes.h(393) : voir la déclaration de 'IplImage'
    c:\documents and settings\administrateur\bureau\taff\final\videointerface_1.0\videointerface_1.0\Form1.h(512) : error C2065: 'myVector' : identificateur non déclaré
    Je ne possède pas le header vector.h

    Je ne sais pas trop quoi faire car j'ai vu que cette méthode est pratique car elle a pas mal de fonctions deja crée pour le remplissage, suppression....

    Personellement, j'ai juste besoin d'y écrire et d'y lire, est ce la pein d'utiliser cette méthode...

    Merci de ton aide !

  4. #4
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Pardon, j'ai oublié de te dire d'inclure:

    Voilà ! Ca devrait marcher!

  5. #5
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Merci de ton aide poukill, il me manquait en effet le header <vector> que j'avais tenté d'ajouter par un #include <vector.h> et c'est surement cela qui a fait que ca ne marchait pas...

    Quoiqu'il en soit, j'ai encore une erreur assez spéciale que j'ai du mal à résoudre.

    Voila, la création du vecteur se passe tres bien, mais des que je cherche à réserver la mémoire voila l'erreur que le compilateur me met :

    ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myVector.reserve(nbr_frame);

    erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    VideoInterface_1.0.obj : error LNK2001: symbole externe non résolu "extern "C" int __cdecl _CrtDbgReportW(int,wchar_t const *,int,wchar_t const *,wchar_t const *,...)" (?_CrtDbgReportW@@$$J0YAHHPB_WH00ZZ)
    C:\Documents and Settings\Administrateur\Bureau\taff\Final\VideoInterface_1.0\Debug\VideoInterface_1.0.exe : fatal error LNK1120: 1 externes non résolus

    Je sais pas trop d'ou cela peut venir...
    J'ai essayé de changer mon int en unsigned int car apparement ca aurait pu causer un probleme, mais l'erreur reste la meme. J'ai meme essayé de mettre 100, mais toujours le meme soucis, il y a t il un probleme dans ma syntaxe ?

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Le reserve n'est pas obligatoire, c'est juste pour la performance...
    Essaye sans, ça marche aussi... Ca sera un peu moins performant (à peine).

    Par contre, je comprend pas pourquoi ça marche pas
    Essaye de compiler en mode "Release" en non plus en Débug...

  7. #7
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Merci de ton aide poukill.

    J'ai donc retirer la ligne que tu m'a dite, mais lors de la boucle j'ai toujours une erreur similaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    VideoInterface_1.0.obj : error LNK2001: symbole externe non résolu "extern "C" int __cdecl _CrtDbgReportW(int,wchar_t const *,int,wchar_t const *,wchar_t const *,...)" (?_CrtDbgReportW@@$$J0YAHHPB_WH00ZZ)
    C:\Documents and Settings\Administrateur\Bureau\taff\Final\VideoInterface_1.0\Debug\VideoInterface_1.0.exe : fatal error LNK1120: 1 externes non résolus

    Je ne comprend vraiment d'ou cette erreur peux venir, cela reste un mystere !!

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    C'est une erreur de LIEN, pas de compilation. CA vient pas du petit bout de code ici présent (le reserve devrait être correct).
    Tu as des erreurs en compilant sans ce bout de code?

  9. #9
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Bon il me fallait insérer les librairies msvcrt.lib et msvcrtd.lib à mon projet pour que ca compile. C'est exactement ce que tu me disais poukill, si je veux le faire en mode debug il faut ajouter ces librairies, mais normalement (je n'ai pas essayé) en mode release il ne doit pas y avoir de probleme...

    De plus désormais, le .reserve marche donc plus de soucis !

    Juste pour finir, comment fait ton pour sélectionner une case de mon vecteur ?
    Car dans mon programme j'ai besoin de certaines valeurs de mon tableau, je fait donc des choses du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int intStride = (FrameVector[1]->width * FrameVector[1]->nChannels + 3) & -4;
    Et la ca compile, mais lors de l'execution j'ai un Null Array Pointer.
    Peut etre que la méthode vecteur ne marche pas dans ce cas ?


    Merci de ton aide poukill, elle m'a été précieuse !

  10. #10
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Un vector se comporte excatement comme un tableau classique (mémoire contiguë, etc...) avec plein de choses pratiques en plus...
    Plus d'infos dans la ICI

    La STL et tous ses conteneurs (list, vector, map etc...) sont très pratiques et très optimisés. Il faut les utiliser dans 99 % des cas, car avec les compilateurs récents, la perte de performance est minime!

    L'accès à un vector se fait classiquement par :
    Si tu dois parcourir le vector en entier, alors il vaut mieux utiliser un itérateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::vector< IplImage > myVector;
    std::vector< IplImage >::iterator iter;
    
    for (iter = myVector.begin(); iter != myVector.end(); iter++)
    {
          temp = *iter; // accède à la donnée, équivalent à myVector[i]
    }

  11. #11
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    En fait je ne dois pas parcourir tout le vector, mais par exemple afficher l'image numéro 10 qui doit normalement se trouver dans Vector[10], et pour cela j'ai besoin de recupérer certaines valeurs de la structure IplImage* comme height, length, ....

    Et le problème est qu'a chaque fois il me dit que le pointeur est NULL.

    J'ai l'impression que mon vecteur ne se remplie pas.

  12. #12
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Regarde avec le débuggeur ce que contient myVector à l'éxécution...
    Il ne devrait pas y avoir de problèmes!

    ou alors c'est dans le queryFrame() !

    Bonne continuation.

  13. #13
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Merci poukill maintenant ca marche, il y avait des petites imperfections dans mon code, mais je les ai resolus grace au deboggueur.

    Cependant je n'utilise pas l'iterateur, je n'en ai pas besoin, enfin pour l'instant !


    Allez +1 pour poukill !

  14. #14
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Regarde du côté de la STL pour aller plus loin ensuite...

    Bonne continuation !

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

Discussions similaires

  1. Obtenir une IplImage à partir d'un vecteur
    Par zuzudesbois dans le forum OpenCV
    Réponses: 3
    Dernier message: 16/06/2009, 11h50
  2. Vecteur ou liste d'IplImages ?
    Par bricoleurfoo dans le forum OpenCV
    Réponses: 3
    Dernier message: 03/04/2008, 10h20
  3. Récuperer les coordonnées d'un vecteur
    Par kerzut dans le forum OpenGL
    Réponses: 5
    Dernier message: 15/04/2003, 11h51
  4. Zoom sur des vecteurs ou lignes
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/11/2002, 10h40
  5. matrices * vecteur
    Par delire8 dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 07/09/2002, 14h15

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