首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XYZ骨架坐标与kinect的性质是什么?

XYZ骨架坐标与kinect的性质是什么?
EN

Stack Overflow用户
提问于 2016-07-05 15:10:54
回答 1查看 388关注 0票数 2

我正在用kinect设备开发一个手势应用程序。这里我用X,y,z坐标来检查手势。

我想知道特定手势的骨架的本质。我正在检查这个手势是否是手推的。

代码语言:javascript
复制
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;
}

但我得到了这样的原始价值观:

产出:

代码语言:javascript
复制
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协调检查手推,手拉?

我对协调检查感到困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-06 07:47:36

这些值以米为单位,位于Kinect v2 "相机空间“(链接页面上有一张很好的图片):

相机空间是指Kinect所使用的三维坐标系。坐标系的定义如下:

  • 原点(x=0,y=0,z=0)位于Kinect上红外传感器的中心。
  • X长到传感器的左边
  • Y长大了(注意这个方向是基于传感器的倾斜)
  • Z沿传感器所面对的方向生长
  • 1单位=1米

因此,当你站在镜头前,把你的手推向它时,Z值应该减小。

要根据用户的位置和方向获得坐标,您必须自己旋转并转换坐标。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38206972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档