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:
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:
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:
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:
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