Bonjour,

depuis un moment je bloque sur un out of memory et je post mon problème afin de savoir si quelqu'un pourrait m'aider à le résoudre.

Travaillant sur Kinect (SDK 1.0 officiel) et avec OpenCVSharp v2.3 et OpenCv v2.3, j'arrive à afficher les images que je veux, mais au bout d'un moment, ma mémoire est pleine et une OpenCVexception intervient( Failed to allocate 1228820 bytes , outofmemory).

J'ai localiser le problème :
Afin de mettre un tableau d'octet dans une CvMat, je suis obliger de faire un CvMat cvmc = new CvMat(480, 640, MatrixType.U8C4, pixC); avec pixC étant un tableau de byte récupérant l'image couleur de la Kinect.
J'ai tout essayer pour vider la mémoire mais rien n'y fait :
cvmc.DecRefData(); ou
cvmc.releaseData(); ou
Cv.ReleaseMat(cvmc); ou
GC.collect(); ou encore
cvmc.dispose();... mais rien n'y fait...

Voici mon code :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
byte[] pixC = new byte[640 * 480 * 4];
//fonction qui permet de récuperer le flux vidéo de la kinect (tourne en boucle)
 void kinectsensor_AllFramesReady(object sender, AllFramesReadyEventArgs e)
        {
//Récupère l'image couleur
            using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
            {
                if (colorFrame == null)
                {
                    return;
                }
//Copie l'image dans un tableau d'octet (byte)
                colorFrame.CopyPixelDataTo(pixC);
 
//Initialisation de la CvMat avec le tableau de byte pixC
                CvMat cvmc = new CvMat(480, 640, MatrixType.U8C4, pixC);
 
//Affichage de l'image
                Cv.ShowImage("essai", cvmc);
//Un release qui fait rien du tout
                Cv.ReleaseMat(cvmc);                
            }
}
Merci d'avance pour l'aide accorder.