2011-11-10 3 views
1

J'essaye de produire une image de la kinect où tous les pixels qui ne représentent pas un joueur seront mis au noir.Profondeur de Kinect avec l'index de joueur + flux visuel

Mon idée est d'utiliser les données produites par le depthstream avec l'index du lecteur avec le flux vidéo pour accomplir cette tâche.

Mon espoir était de faire quelque chose comme ceci:

byte[] pixelData = video.imageFrame.Bits; 
byte[] depthData = depth.imageFrame.Bits; 

var depthIndex = 0; 
for (var y = 0; y < height; y++) 
{ 
    var heightOffset = y * width; 

    for (var x = 0; x < width; x++) 
    { 
      var index = (x + heightOffset) * 4; 

      var distance = GetDistanceWithPlayerIndex(depthData[depthIndex], depthData[depthIndex + 1]); 

      if (GetPlayerIndex(depthData[depthIndex]) == 0) 
      { 
       pixelData[index + BlueIndex] = 0; 
       pixelData[index + GreenIndex] = 0; 
       pixelData[index + RedIndex] = 0; 
      } 
    } 
} 

La question que je travaille actuellement sur elle en essayant d'obtenir les données de VideoStream d'avoir la même résolution que le depthwithplayerindex.

J'ai essayé de reconstituer des choses ensemble d'autres messages ici mais je ne peux pas le faire fonctionner:

private byte[] ScaleVideoImage(ImageFrame imageFrame, int newWidth, int newHeight) 
     { 
      //convert imageFrame to byte array 
      Byte[] oPixelData = imageFrame.Image.Bits; 

      Image tempImage = BytesToImg(oPixelData); 
      //scale image 
      Bitmap bmp = new Bitmap(newWidth, newHeight); 
      using (Graphics graphics = Graphics.FromImage(bmp)) 
      { 
       graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
       graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
       graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 

       graphics.DrawImage(tempImage, 0, 0, bmp.Width, bmp.Height); 
      } 
      //Convert image to byte array 
      MemoryStream ms1 = new MemoryStream(); 
      bmp.Save(ms1, ImageFormat.Jpeg); 
      byte[] result = ms1.GetBuffer(); 
      bmp.Dispose(); 
      ms1.Close(); 
      return result; 
     } 

Toutes les idées?

Répondre

Questions connexes