Projet

Général

Profil

Kinect OpenCV » cvdemo.cpp

Anonyme, 24/11/2021 16:07

 
//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;
}
    (1-1/1)