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 :

Fuites de mémoire avec cvLoadImage et cvCvtColor


Sujet :

OpenCV

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Fuites de mémoire avec cvLoadImage et cvCvtColor
    Bonjour,

    Je viens d'installer OpenCV2.0, mon compilateur est QtCreator sous winXP.

    Voici les problèmes auxquels je suis confronté depuis plusieurs jours:

    1) En utilisant le gestionnaire des tâches, je constate une fuite mémoire sur ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       IplImage* im = cvLoadImage("monPath",1);
       cvReleaseImage(&im);
    Je n'ai pas trouvé grand chose de compréhensible sur le sujet pour le moment. Avez-vous constaté un pb avec cette fonction?

    2) D'après la doc Opencv, la fonction cvCvtImage prend en arguments des images pouvant être codées sur 16bits.
    J'ai besoin de colorer le buffer sortie de ma carte d'acquisition (appelé m_buffer)

    Je crée donc 2 variables externes qui sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       IplImage* imageGray = 0, *imageRGB = 0;
    imageGray va me servir d'image grise à convertir en image couleur en utilisant la fonction d'opencv.

    puis, je les initialise dans le constructeur de ma classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       imageGray   =   cvCreateImage(cvSize(748*8,466),IPL_DEPTH_16U,1);
       imageRGB    =   cvCreateImage(cvSize(748*8,466),IPL_DEPTH_16U,3);
    Ces 2 images vont être utilisées dans une fonction de rafraichissement (genre draw() ou update(), bref, une fonction appelée régulièrement pour rafraichir mon écran)

    Voici l'endroit où le programme me plante sans pitié ( à la ligne cvCvtColor )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      cvGetRawData(imageGray,&grayPtr);
      unsigned short *tmp_ptr = m_buffer;  // m_buffer contient l'image à rafraichir
     
      for(int nbOfLines = 0; nbOfLines<466 ; ++nbOfLines){
         memcpy(grayPtr , tmp_ptr , imageGray->width*2); // *2 car copie sur 2 octets...
         grayPtr     += imageGray->widthStep;
         tmp_ptr    += imageGray->width;
       }
      cvCvtColor(imageGray,imageRGB,CV_BayerGR2RGB);
     
      cvShowImage("image grise",imageGray);
      cvShowImage("image couleur",imageRGB);
    Je précise que si je commente cvCvtColor, mes 2 images (grise et couleur) s'affichent correctement.
    Je précise aussi qu'avec des buffers sur 8 bits, le code ci-dessus passe sans problème.

    Auriez-vous une idée d'où ce plantage peut venir?

    Merci pour votre aide.
    Fab

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Concernant ma 2eme question, je viens de trouver la réponse :
    mon format de conversion n'est pas supporté par le 16bits (merci la doc...)

    Je me permets une petite dérive,
    J'ai constaté qu'il me fallait recompiler openCV avec mon compilateur perso (à savoir mingw) afin de faire tourner correctement mes programmes (certaines fonctions opencv ayant un comportement bizarre..)
    Donc, j'ai lancé cmake et là, je suis un peu désemparé devant toutes les options possibles. J'ai donc choisi celles qui me paraissaient les plus appropriées, mais malgré tout, lorsque je lance mingw32-make, la compilation s'arrete au bout d'une 50aine de % ... au moment de générer highgui...

    Pourriez-vous me préciser si vous avez déjà fait une telle manip, si vous avez fait qq chose de particulier pour que cela fonctionne?

    fab

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Solution
    Bon en cherchant une réponse a un autre de mes problèmes (que j'ai résolu pendant que je m'inscrivais à ce forum), je suis tomber sur ton post.

    En fait, je suis tomber sur le même problème que toi il y a quelque jours et j'ai eu toute les peine du monde a le résoudre (même mon ami Google n'arrivait pas a m'aider ). Enfin, en cherchant un peu plus, mon ami google m'a finalement aider a résoudre ce problème. je donne donc la solution ici pour que les suivants tombent plus rapidement sur la solution.

    Le problème est que le libvideoinput.a (celui qui pose problème dans la compilation de highgui) a été compilé par un GCC plus ancien que celui qui est contenu dans QT. Le GCC plus recent (celui de QT) n'a donc plus certain symbole. La solution est donc de recompiler la librairie "videoinput" avec un gcc plus récent (celui de QT par exemple)

    personnellement je ne l'ai pas recompiler moi même. Je l'ai simplement telecharger de quelqun qui l'avait fait : http://github.com/Kronen/Qt-OpenCv/r...ibvideoInput.a

    la réponse donnée ici n'est en fait qu'une traduction de la page qui a permis de m'aider (que je donne en lien rendre le mérite a qui de droit) : http://sourceforge.net/tracker/index...70&atid=376677

    voila

    Standby


    Ps: une fois openCV recompilé, oublie pas de recopier les nouvelles DLL dans le répertoire de l'application car sinon t'aura toujours des comportement bizarre. (c'était le problème que j'ai résolu en m'inscrivant a ce forum )

Discussions similaires

  1. Fuite de mémoire avec GUI Swing
    Par pouvoir triforce dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 17/06/2011, 00h26
  2. Fuite de mémoire avec VBO ?
    Par poliok dans le forum OpenGL
    Réponses: 7
    Dernier message: 08/11/2010, 16h09
  3. Problème de fuite de mémoire avec GTK+
    Par gwenhael dans le forum GTK+
    Réponses: 15
    Dernier message: 03/01/2008, 16h22
  4. Fuites mémoires avec Vector
    Par ..alex.. dans le forum SL & STL
    Réponses: 15
    Dernier message: 10/08/2006, 11h35
  5. Fuite mémoire avec valgrind
    Par franchouze dans le forum C++
    Réponses: 3
    Dernier message: 05/06/2006, 16h47

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