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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| /*VARIABLES GLOBALES*/
Context g_context;
DepthGenerator g_depth;
ImageGenerator g_image;
DepthMetaData g_depthMD;
ImageMetaData g_imageMD;
/*Debut de la fonction main*/
/*
INITIALISATION DES OBJETS OPENNI
(ces objets me permettent par la suite de récupérer les données
de la caméra)
*/
//variable(s) pour test des erreurs
XnStatus rc;
//initialise le context
rc = g_context.InitFromXmlFile(SAMPLE_XML_PATH);
CHECK_RC(rc, "initialisation du context\n");
//initialise générateur de profondeur
rc = g_context.FindExistingNode(XN_NODE_TYPE_DEPTH, g_depth);
CHECK_RC(rc, "initialisation du générateur de profondeur\n");
//initialise métadonnées de profondeur
g_depth.GetMetaData(g_depthMD);
//initialise générateur d'image
rc = g_context.FindExistingNode(XN_NODE_TYPE_IMAGE, g_image);
CHECK_RC(rc, "initialisation du générateur d'image\n");
//initialise métadonnées d'image
g_image.GetMetaData(g_imageMD);
//generation des donnees
rc = g_context.StartGeneratingAll();
CHECK_RC(rc, "generating all context\n");
/* j'utilise pour le moment une boucle infinie pour l'affichage */
while(true){
//début du timer destiné à calculer le temps d'exécution
double tt = (double)cvGetTickCount();
//variables
int nbColone = g_imageMD.XRes();
int nbLigne = g_imageMD.YRes();
//MODIFICATION : MISE A JOUR CORRECT DES DONNES
// lecture d'une nouvelle image
rc = g_context.WaitAnyUpdateAll();
CHECK_RC(rc, "Mise à jour de l'image\n");
g_image.GetMetaData(g_imageMD);
//déclaration , alocation qui pointe sur les future pixels à afficher
unsigned char* picture = new unsigned char[nbLigne * nbColone * 3];
//initialisation avec les données récupérées
memcpy(picture, (unsigned char*)g_imageMD.RGB24Data(),nbLigne * nbColone * 3);
//bascule du sens du Rouge et du bleu pour avec le format RGB
for(int i = 0 ; i < nbLigne * nbColone ; i++){
unsigned char temp = picture[i*3];
picture[i*3] = picture[i*3+2];
picture[i*3+2] = temp;
}
//transfère dans une matrice puis affichage
cv::Mat couleurMatRes(nbLigne, nbColone, CV_8UC3, picture);
cv::imshow("Christophe",couleurMatRes);
//attente d'une ms
cvWaitKey(1);
//libération de la mémoire couleur
delete[] picture;
//fin du timer et calcul du temps écoulé
tt = (double)cvGetTickCount() - tt;
cout << "Temps d'extraction : " << tt/(cvGetTickFrequency()*1000.) << "ms" << endl;
} |
Partager