kinect2.0的骨骼节点坐标的获取与handstate

kinect2.0的骨骼追踪相比较上一代算是有了大幅度提升,最多可以同时追踪6个人身上的25个骨骼节点(图为v1和v2的对比)


其实单纯的获取骨骼节点的坐标还是很简单的,我就讲一下在控制台程序中实时的输出骨骼坐标的方法吧

当然 只要需要调用kinect 第一步肯定是添加引用

kinect2.0的骨骼节点坐标的获取与handstate_第1张图片

因为所声明的变量在获取骨骼的监听事件中还要调用 ,所以需要声明为全局静态变量,首先还是要声明个kinectsensor

public static KinectSensor kinect;
public static BodyFrameReader bodyframereader;
public static Body[] bodies = null;
变量声明完,下一步就应该获取并打开传感器了

kinect = KinectSensor.GetDefault();
kinect.Open();
然后开始读入数据

bodyframereader = kinect.BodyFrameSource.OpenReader();
if (bodyframereader != null)
{
                bodyframereader.FrameArrived +=       Bodyframereader_FrameArrived;
 }

        private static void Bodyframereader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
        {
            bool data = false;
            using (BodyFrame bodyframe = e.FrameReference.AcquireFrame())
            {
                if (bodyframe != null)
                {
                    if (bodies == null)
                    {
                        bodies = new Body[bodyframe.BodyCount];
                    }

                }
                bodyframe.GetAndRefreshBodyData(bodies);
                data = true;
            }
            if (data)
            {
                foreach (Body body in bodies)
                {
                    if (body.IsTracked)
                    {
                        IReadOnlyDictionary<JointType, Joint> joints = body.Joints;
                        CameraSpacePoint position = joints[JointType.HandRight].Position;
                        Console.WriteLine(position.X.ToString() + "," + position.Y.ToString() + "," + position.Z.ToString());
                        CameraSpacePoint position2 = joints[JointType.ShoulderRight].Position;
                        Console.WriteLine(position2.X.ToString() + "," + position2.Y.ToString() + "," + position2.Z.ToString());
                        Console.WriteLine();
                        

                    }
                }


            }
        }
kinect2.0的骨骼节点坐标的获取与handstate_第2张图片


插上kinect运行就可以看到输出了

kinect2.0的骨骼节点坐标的获取与handstate_第3张图片

在此基础上想要得到handstate也就是手势 也就是几行代码了

类似  在

if (body.IsTracked)的大括号下添加
if (body.HandRightState == HandState.Closed)
    Console.WriteLine("close\n\n");
if (body.HandRightState == HandState.Open)
    Console.WriteLine("open\n\n");
if (body.HandRightState == HandState.Lasso)
    Console.WriteLine("lesso\n\n");

t同时把上面的输出给注释掉(全选后ctrl+k+c可以快速注释 ,ctrl+k+u取消注释)

运行后对着kinect把右手合上张开就可以看到输出了,还有那个lesso ,完全合上是close 完全张开是open 其他情况就都是lesso了

附上全部handstate

你可能感兴趣的:(vs,kinect)