Bonjour à tous,
Je travaille actuellement sur une application de tracking, j'utilise la kinnect comme capteur (via la biblio OpenNi) et j'aimerai faire le processing en utilisant OpenCv (extraction de features et apprentissage).
Seulement mon soucis, c'est que Je ne parviens pas à copier le buffer d'openNi sur une image classique OpenCV(IplImage)...
Voila le code que j'utilise pour récupérer et convertir (ça ne marche pas)ça bloque au niveau de
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
24
25
26
27
28
29 hile(true) // Crux of this project { if(device.getSensorInfo(SENSOR_IR) != NULL) { rc = ir.readFrame(&irf); // Read one IR VideoFrame at a time if(irf.isValid()) // If the IR VideoFrame is valid { vmode = ir.getVideoMode(); // Get the IR VideoMode Info for this video stream. // This includes its resolution, fps and stream format. const uint16_t* imgBuf = (const uint16_t*)irf.getData(); // PrimeSense gives the IR stream as 16-bit data output h=irf.getHeight(); w=irf.getWidth(); frame.create(h, w, CV_16U); // Create the OpenCV Mat Matrix Class Object // to receive the IR VideoFrames memcpy(frame.data, imgBuf, h*w*sizeof(uint16_t)); // Copy the ir data from memory imgbuf -> frame.data // using memcpy (a string.h) function frame.convertTo(frame, CV_8U); // OpenCV displays 8-bit data (I'm not sure why?) // So, convert from 16-bit to 8-bit namedWindow("ir", 1); // Create a named window imshow("ir", frame); // Show the IR VideoFrame in this window if(waitKey(33)==27)break; // Escape key number } } }
J'arrive pas à débugguer :/.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 memcpy(frame.data, imgBuf, h*w*sizeof(uint16_t));
Quelqu'un aurait-il fait cela auparavant ?
Je vous remercie.
Partager