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 :
Merci d'avance pour l'aide accorder.
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); } }
Partager