2015-04-06 107 views
2

我想使用sdk中的coordinateMapper函数将深度图映射到颜色空间。但是,我收到的输出结果并不符合我的预期,它的纵横比似乎较小,图像似乎是镜像的。使用C的Kinect v2颜色深度映射#

下面是我使用的代码:

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中显示的内容。