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 :
Je n'ai pas trouvé grand chose de compréhensible sur le sujet pour le moment. Avez-vous constaté un pb avec cette fonction?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 IplImage* im = cvLoadImage("monPath",1); cvReleaseImage(&im);
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 :
imageGray va me servir d'image grise à convertir en image couleur en utilisant la fonction d'opencv.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 IplImage* imageGray = 0, *imageRGB = 0;
puis, je les initialise dans le constructeur de ma classe
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)
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);
Voici l'endroit où le programme me plante sans pitié ( à la ligne cvCvtColor )
Je précise que si je commente cvCvtColor, mes 2 images (grise et couleur) s'affichent correctement.
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 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
Partager