Kinect V2如何从原始分辨率1920x1080的背景中提取播放器/用户

时间:2014-07-23 06:42:24

标签: kinect

在Kinect V2中我们知道深度和颜色分辨率是不同的。使用SDK中提供的映射API,很容易从彩色框架获取颜色值并放入深度框架,如互联网上的许多帖子所示。这将给出512x414大小的最终图像。

但我想在原始色框中提取播放器/用户,以便最终图像的分辨率为1920x1080。

我可以考虑使用映射API并使用User / PLayer像素标记颜色框。然后应用一些启发式并公开RGB值相邻像素并完成用户/播放器图像。

有没有人更好地建议我们如何做到最好?

1 个答案:

答案 0 :(得分:1)

嗨而不是从深度到颜色的映射尝试将颜色框架映射到深度空间并将输出图像的大小设置为等于图像的大小。

coordinateMapper.MapColorFrameToDepthSpace(depthData, depthPoints);

for (int colorIndex = 0; colorIndex < depthPoints.Length; ++colorIndex)
            {
                DepthSpacePoint depthPoint = depthPoints[colorIndex];

                if (!float.IsNegativeInfinity(depthPoint.X) && !float.IsNegativeInfinity(depthPoint.Y))
                {
                    int depthX = (int)(depthPoint.X + 0.5f);
                    int depthY = (int)(depthPoint.Y + 0.5f);

                    if ((depthX >= 0) && (depthX < depthWidth) && (depthY >= 0) && (depthY < depthHeight))
                    {
                        int depthIndex = (depthY * depthWidth) + depthX;
                        byte player = bodyData[depthIndex];
                        if (player != 0xff)
                        {
                            int sourceIndex = colorIndex * 4;

                            OutImage[sourceIndex] = _colorData[sourceIndex++];    
                            OutImage[sourceIndex] = _colorData[sourceIndex++];    
                            OutImage[sourceIndex] = _colorData[sourceIndex++];    
                            OutImage[sourceIndex] = 0xff;                         
                        }
                    }
                }
            }

初始输出图像:

 OutImage= new byte[colorWidth*colorHeight*4]; //1920x1080x4