如何从数据Kinect SDK C#中获取玩家深度?

时间:2012-03-15 21:34:44

标签: c# kinect

当玩家(特别是玩家)近/远时,做一个小组项目试图让事情发生,所以我们写了这个函数。 (我们不允许使用骨架功能)

private void FindDepth(DepthImageFrame depthFrame)
    {

        short[] rawDepthData = new short[depthFrame.PixelDataLength];
        depthFrame.CopyPixelDataTo(rawDepthData);

        Byte[] pixels = new byte[depthFrame.Height * depthFrame.Width * 4];

        for (int depthIndex = 0; depthIndex < rawDepthData.Length; depthIndex++)
        {
            int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask;
            int depth = rawDepthData[depthIndex] >> DepthImageFrame.PlayerIndexBitmaskWidth;

            if (player > 0)
            {
                playerDepth = rawDepthData[depthIndex];
            }

        }

    }

为什么这不能通过抓住一个像素来正确地抓住玩家的深度?

2 个答案:

答案 0 :(得分:3)

深度像素表示为16位。低3位提供玩家索引,其余13位提供深度,例如{深度位} {玩家索引位}

{0100 1011 1001 0} {010}

因此,为了找到玩家索引,我们通过DepthImageFrame.PlayerIndexBitmask来显示如下所示

(0100 1011 1001 0010)AND(0000 0000 0000 0111)= 0000 0000 0000 0010 = 2即第二名球员

并且为了找到距离,我们右移3位,返回13位,如下所示 0000 1001 0111 0010 = 2418,即2418mm

答案 1 :(得分:0)

重要的是要记住,玩家编号值只会添加到深度图像中 骨架跟踪已打开。如果关闭骨架跟踪,则每个深度的玩家编号 value设置为0.