我目前正在尝试使用 XNA 中的 kinect 进行手/手指跟踪。为此,我需要能够指定我希望我的程序渲染的深度范围。我环顾四周,我看不出这是如何完成的。据我所知,kinect 的深度值仅适用于在 depthStream 中找到的预设范围。

我想做的是使其模块化,以便我可以更改 kinect 渲染的深度范围。我知道这之前已经失败了,但我在网上找不到任何可以告诉我如何做到这一点的东西。

有人可以帮我吗?

我已经可以使用 kinect 渲染标准深度 View ,我为转换深度帧所做的方法如下(我感觉这里需要设置一些东西)

  private byte[] ConvertDepthFrame(short[] depthFrame, DepthImageStream depthStream, int depthFrame32Length)
    {
        int tooNearDepth = depthStream.TooNearDepth;
        int tooFarDepth     = depthStream.TooFarDepth;
        int unknownDepth    = depthStream.UnknownDepth;
        byte[] depthFrame32 = new byte[depthFrame32Length];


        for (int i16 = 0, i32 = 0; i16 < depthFrame.Length && i32 < depthFrame32.Length; i16++, i32 += 4)
        {
            int player      = depthFrame[i16] & DepthImageFrame.PlayerIndexBitmask;
            int realDepth   = depthFrame[i16] >> DepthImageFrame.PlayerIndexBitmaskWidth;


            // transform 13-bit depth information into an 8-bit intensity appropriate
            // for display (we disregard information in most significant bit)
            byte intensity = (byte)(~(realDepth >> 8));


            if (player == 0 && realDepth == 00)
            {
                // white
                depthFrame32[i32 + RedIndex]    = 255;
                depthFrame32[i32 + GreenIndex]  = 255;
                depthFrame32[i32 + BlueIndex]   = 255;
            }

         // omitted other if statements. Simple changed the color of the pixels if they went out of the pre=set depth values

            else
            {
                // tint the intensity by dividing by per-player values
                depthFrame32[i32 + RedIndex]    = (byte)(intensity >> IntensityShiftByPlayerR[player]);
                depthFrame32[i32 + GreenIndex]  = (byte)(intensity >> IntensityShiftByPlayerG[player]);
                depthFrame32[i32 + BlueIndex]   = (byte)(intensity >> IntensityShiftByPlayerB[player]);
            }
        }

        return depthFrame32;
    }

我有一种强烈的预感,我需要在 int player 和 int realDepth 值中进行更改,但我不能确定。

最佳答案

Kinect for Windows Toolkit 1.8.0 中有一个名为 Adaptive UI-WPF 的新示例。它直接在交互区域查看器部分中处理此问题。看看调整近和远边界的代码。它应该对您的情况有所帮助。
.

关于c# - 获取 kinect 的特定深度值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12579823/

10-16 10:11