Convertir la depth_image de la Kinect en "OpenCV_format"
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)
Code:
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
}
}
} |
ça bloque au niveau de
Code:
1 2
|
memcpy(frame.data, imgBuf, h*w*sizeof(uint16_t)); |
J'arrive pas à débugguer :/.
Quelqu'un aurait-il fait cela auparavant ?
Je vous remercie.