|
//g++ cvdemo.cpp -o test -I/usr/local/include/libfreenect -lfreenect_cv `pkg-config --cflags --libs opencv`
|
|
// à compiler avec cette ligne de commande
|
|
|
|
|
|
#include <opencv2/highgui/highgui_c.h>
|
|
#include <stdio.h>
|
|
#include "libfreenect_cv.h"
|
|
#include <pthread.h>
|
|
|
|
pthread_t freenect_thread;
|
|
|
|
|
|
|
|
int h=420; //420 modification format image de sortie depth
|
|
int w=640; //640
|
|
IplImage *GlViewColor(IplImage *depth)
|
|
{
|
|
static IplImage *image = 0;
|
|
if (!image) image = cvCreateImage(cvSize(w,h), 8, 3);
|
|
unsigned char *depth_mid = (unsigned char*)(image->imageData);
|
|
int i;
|
|
for (i = 0; i < w*h; i++) {
|
|
int lb = ((short *)depth->imageData)[i] % 256;
|
|
int ub = ((short *)depth->imageData)[i] / 256;
|
|
switch (ub) {
|
|
case 0:
|
|
depth_mid[3*i+2] = 255;
|
|
depth_mid[3*i+1] = 255-lb;
|
|
depth_mid[3*i+0] = 255-lb;
|
|
break;
|
|
case 1:
|
|
depth_mid[3*i+2] = 255;
|
|
depth_mid[3*i+1] = lb;
|
|
depth_mid[3*i+0] = 0;
|
|
break;
|
|
case 2:
|
|
depth_mid[3*i+2] = 255-lb;
|
|
depth_mid[3*i+1] = 255;
|
|
depth_mid[3*i+0] = 0;
|
|
break;
|
|
case 3:
|
|
depth_mid[3*i+2] = 0;
|
|
depth_mid[3*i+1] = 255;
|
|
depth_mid[3*i+0] = lb;
|
|
break;
|
|
case 4:
|
|
depth_mid[3*i+2] = 0;
|
|
depth_mid[3*i+1] = 255-lb;
|
|
depth_mid[3*i+0] = 255;
|
|
break;
|
|
case 5:
|
|
depth_mid[3*i+2] = 0;
|
|
depth_mid[3*i+1] = 0;
|
|
depth_mid[3*i+0] = 255-lb;
|
|
break;
|
|
default:
|
|
depth_mid[3*i+2] = 0;
|
|
depth_mid[3*i+1] = 0;
|
|
depth_mid[3*i+0] = 0;
|
|
break;
|
|
}
|
|
}
|
|
return image;
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
while (cvWaitKey(10) < 0) {
|
|
IplImage *image = freenect_sync_get_rgb_cv(0);
|
|
if (!image) {
|
|
printf("Error: Kinect not connected?\n");
|
|
return -1;
|
|
}
|
|
cvCvtColor(image, image, CV_RGB2BGR);
|
|
IplImage *depth = freenect_sync_get_depth_cv(0);
|
|
if (!depth) {
|
|
printf("Error: Kinect not connected?\n");
|
|
return -1;
|
|
}
|
|
|
|
IplImage *destination = cvCreateImage ( cvSize(w,h),depth->depth,depth->nChannels );
|
|
cvResize(depth, destination);
|
|
cvShowImage("RGB", image);
|
|
cvShowImage("Depth", GlViewColor(destination));
|
|
}
|
|
return 0;
|
|
}
|