2015-04-06 4 views
2

Я пытаюсь отобразить карту глубины на цветовое пространство, используя функцию координатыMapper из sdk. Однако результат, который я получил, не является тем, что я ожидал, он, по-видимому, имеет меньшие пропорции, и изображение, похоже, зеркально отражается.Отображение глубины цвета Kinect v2 с использованием C#

Ниже приведен код, который я использовал:

depthWidth = depthFrameDescription.Width; 
depthHeight = depthFrameDescription.Height; 

var colorDesc = colorFrame.FrameDescription; 
int colorWidth = colorDesc.Width; 
int colorHeight = colorDesc.Height; 

int size = colorWidth * colorHeight; 

DepthSpacePoint[] colSpacePoints = new DepthSpacePoint[colorWidth * colorHeight]; 

using (KinectBuffer depthFrameData = depthFrame.LockImageBuffer()) 
using (KinectBuffer colorBuffer = colorFrame.LockRawImageBuffer()) 
{ 
    this.bitmap.Lock(); 

    if ((colorWidth == this.bitmap.PixelWidth) && (colorHeight == this.bitmap.PixelHeight)) 
    { 
     byte[] colorFrameData = new byte[size * bytesPerPixel];  

     // Map the values here 
     ushort [] frameData = new ushort[depthWidth * depthHeight]; 
     depthFrame.CopyFrameDataToArray(frameData); 
     coordinateMapper.MapColorFrameToDepthSpace(frameData, colSpacePoints); 

     this.bitmap.WritePixels(new Int32Rect(0, 0, colorWidth, colorHeight), colSpacePoints, colorWidth * bytesPerPixel, 0); 
     this.bitmap.AddDirtyRect(new Int32Rect(0, 0, this.bitmap.PixelWidth, this.bitmap.PixelHeight)); 
    }  
    this.bitmap.Unlock(); 
} 

this.bitmapBackBufferSize = (uint)![enter image description here][1]((this.bitmap.BackBufferStride * (this.bitmap.PixelHeight - 1)) + (this.bitmap.PixelWidth * this.bytesPerPixel)); 
isBitmapLocked = true; 

ответ

0

Если вы пытаетесь отобразить координаты глубины кадра в цветовом кадре, вам не хватает на один шаг.

Вот ссылка, которая, вероятно, объясняет это лучше, что я могу: http://www.bryancook.net/2014/03/mapping-between-kinect-color-and-depth.html

Но в вашем случае, когда вы используете

coordinateMapper.MapColorFrameToDepthSpace(frameData, colSpacePoints); 

Выход не будет использоваться, как вы используете его. Вывод этой функции содержит все точки, которые существуют как в цветовом пространстве, так и в пространстве глубины. Поэтому, чтобы отобразить их, вы хотите итерации через ваши colSpacePoints и что-то делать с каждым результатом, в примере, который я связал, он называется _colorSpacePoints, поэтому вы можете посмотреть, что он с ним делает.

Я застрял, пытаясь сделать что-то похожее на то, что вы делаете, однако через несколько дней я нашел, как правильно использовать отображение. Если вам нужна дополнительная помощь в вашей проблеме, скажите мне, что вы хотите отобразить в своем WriteableBitmap.

Смежные вопросы