0

我正在开发一个 kinect 手势应用程序。所以我从互联网上得到了一个举手手势的代码。

handupgesture()
{

 bool up = false;
 float refDistance = 0.2F;

 SkeletonPoint refPos = localSkeletonHistory[0].Joints[JointType.ShoulderCenter].Position;
 SkeletonPoint startPos = localSkeletonHistory[0].Joints[JointType.HandRight].Position;

 for (int i = 20; i < localSkeletonHistory.Count; i++)
 {
           if (!(Math.Abs(localSkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Y - refPos.Y) < 0.05F &&
                   Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.X - startPos.X) < 0.05F &&
                   Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.Z - startPos.Z) < 0.05F ))
            {
                break;
            }
            if (localSkeletonHistory[i].Joints[JointType.HandRight].Position.Y >= (startPos.Y + refDistance))
            {
                up = true;
                SkeletonHistory.Clear();
                break;
            }
        }
        return up;
} 

我的疑问是:

  • 什么是0.05F?是米吗?厘米?
  • Z轴距离是指关节到kinect距离的距离。是吗 ?

此代码未检测到 hand up。有什么错误或建议吗?

4

1 回答 1

1

0.05FinC#表示浮点数。

float 关键字表示存储 32 位浮点值的简单类型。下表显示了浮点类型的精度和近似范围。

默认情况下,赋值运算符右侧的实数文字被视为双精度值。因此,要初始化浮点变量,请使用后缀 f 或 F,如下例所示:

float x = 3.5F; or in your case 0.05F

来源:https ://msdn.microsoft.com/en-us/library/b1e65aza.aspx

至于你的第二个问题,z轴代表深度。每一帧,捕获的深度图像都由 Kinect 运行时处理成骨架数据。骨骼数据包含深度传感器中可见的最多两个人的人体骨骼的 3D 位置数据。骨架的位置和每个骨架关节(如果启用了主动跟踪)存储为 (x, y, z) 坐标。与深度空间不同,骨架空间坐标以米表示。

x、y 和 z 轴是深度传感器的主体轴,如下所示:

骨架空间

这是一个右手坐标系,将 Kinect 放置在原点,正 z 轴沿 Kinect 指向的方向延伸。正 y 轴向上延伸,正 x 轴向左延伸。

来源:https ://msdn.microsoft.com/en-us/library/hh973078.aspx

至于你的最后一个问题 - 尝试降低 0.5F 容差。

另外,我想向您指出 Windows Kinect 站点中的一些示例: https ://kinectforwindows.codeplex.com/

于 2016-07-01T16:47:04.697 回答