我正在用kinect设备开发一个手势应用程序。这里我用X,y,z坐标来检查手势。
我想知道特定手势的骨架的本质。我正在检查这个手势是否是手推的。
private handpush()
{
bool MovedFront = false;
float refDistance = 0.2F;
SkeletonPoint refPos = SkeletonHistory[0].Joints[JointType.ShoulderCenter].Position;
SkeletonPoint startPos = SkeletonHistory[0].Joints[JointType.HandRight].Position;
//printing all intial cordinates
Console.WriteLine(" ShoulderCenter[0].Z = " + refPos.Z);
Console.WriteLine(" HandRight[0].X = " + startPos.X);
Console.WriteLine(" HandRight[0].Y = " + startPos.Y);
Console.WriteLine(" HandRight[0].Z = " + startPos.Z);
for (int i = 20; i < SkeletonHistory.Count; i++)
{
Console.WriteLine(" ShoulderCenter[i].Z = " + SkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Z);
Console.WriteLine(" HandRight[i].X = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.X);
Console.WriteLine(" HandRight[i].Y = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.Y);
Console.WriteLine(" HandRight[i].Z = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.Z);
if (!(SkeletonHistory[i].Joints[JointType.HandRight].Position.Y < SkeletonHistory[i].Joints[JointType.Head].Position.Y &&
Math.Abs(SkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Z - refPos.Z) < 0.05F &&
Math.Abs(SkeletonHistory[i].Joints[JointType.HandRight].Position.Y - startPos.Y) < 0.1F &&
Math.Abs(SkeletonHistory[i].Joints[JointType.HandRight].Position.X - startPos.X) < 0.1F))
{
Console.WriteLine("CheckHandPush breaking !!");
break;
}
if (SkeletonHistory[i].Joints[JointType.HandRight].Position.Z <= (startPos.Z - refDistance))
{
Console.WriteLine("CheckHandPush sucess");
bMovedFront = true;
temp_SkeletonHistory.Clear();
}
}
return MovedFront;
}但我得到了这样的原始价值观:
产出:
ShoulderCenter[0].Z = 1.246491
HandRight[0].X = 0.1519185
HandRight[0].Y = -0.2328865
HandRight[0].Z = 1.014945
ShoulderCenter[i].Z = 1.248788
HandRight[i].X = 0.1397971
HandRight[i].Y = -0.2452036
HandRight[i].Z = 1.054223
-----
ShoulderCenter[0].Z = 1.26865
HandRight[0].X = 0.1545139
HandRight[0].Y = -0.3375102
HandRight[0].Z = 1.057466
ShoulderCenter[i].Z = 1.25049
HandRight[i].X = 0.09602752
HandRight[i].Y = -0.283217
HandRight[i].Z = 1.150237
---
ShoulderCenter[0].Z = 1.243356
HandRight[0].X = 0.1406149
HandRight[0].Y = -0.2458241
HandRight[0].Z = 1.065399
ShoulderCenter[i].Z = 1.250542
HandRight[i].X = 0.1392216
HandRight[i].Y = -0.2418006
HandRight[i].Z = 1.046706我在推我的手,所以Z轴应该增加值还是减小值?意味着Z坐标长度是从kinect设备还是人体开始的?
这种情况可以推手吗?有什么建议吗?我能得到一个示例代码吗?
有任何有用的链接x,y,z协调检查手推,手拉?
我对协调检查感到困惑。
发布于 2016-07-06 07:47:36
这些值以米为单位,位于Kinect v2 "相机空间“(链接页面上有一张很好的图片):
相机空间是指Kinect所使用的三维坐标系。坐标系的定义如下:
因此,当你站在镜头前,把你的手推向它时,Z值应该减小。
要根据用户的位置和方向获得坐标,您必须自己旋转并转换坐标。
https://stackoverflow.com/questions/38206972
复制相似问题