2012-05-25 3 views

Répondre

1

si vous utilisez OpenNI SDK, vous pouvez simplement pointer vers le tampon:

//on setup: 
xn::DepthGenerator depthGenerator; 
xn::DepthMetaData depthMD; 
cv::Mat depthWrapper; 

//on update loop, 
//after context.WaitAnyUpdateAll(); 
depthGenerator.GetMetaData(depthMD); 
depthWrapper = cv::Mat(depthMD.YRes(), depthMD.XRes(), CV_16UC1, (void*) depthMD.Data()); 

Notez que depthWrapper est const donc vous devez le clone pour a tout ce que vous pour le manipuler

0

Le documentation avoir besoin. Ne peut pas élaborer mieux que cela.

0

Vous devez faire deux choses (en dehors de la lecture sur le contexte, le générateur de profondeur et l'initialisation de Kinect):

  • Créer tapis du type CV_16U a. context.WaitOneUpdateAll (depth_map); b. Mdepth_original = Mat (h_depth, w_depth, CV_16U, (void *) depth_map.GetData()) c. copier le Mat car il sera détruit lors de la prochaine lecture: Mdepth_original.copyTo (depth);
  • La profondeur de la carte est de couleur grise ou de couleur. La couleur semble être une bonne idée (256^3 niveaux) mais un œil humain est plus sensible au changement de luminance. Même avec 256 niveaux, vous pouvez mapper 10 000 niveaux de Kinect raisonnablement bien en utilisant la technique [égalisation d'histogramme] [1]. Une façon la plus simple est bien de perdre la précision et faire juste I (x, y) = 255,0 * z (x, y)/z_range

Voici comment égalisation d'histogramme est implémenté dans openNI2: https://github.com/OpenNI/OpenNI2/blob/master/Samples/Common/OniSampleUtilities.h

Questions connexes