如何获得Kinect的关节坐标?

时间:2014-02-21 10:51:50

标签: coordinates kinect

我正在学习Kinect,我遇到了问题。我想写一个文本文件骨架关节的坐标,但我不知道该怎么做。有人能帮助我吗?

2 个答案:

答案 0 :(得分:2)

如果您使用的是SDK:

using System.IO;

StreamWriter writer = new StreamWriter(@path);
int frames = 0;

...

void AllFramesReady(object sender, AllFramesReadyEventArgs e)
{
    frames++;
    using (SkeletonFrame sFrame = e.OpenSkeletonFrameData())
    {
        if (sFrame == null)
            return;

        skeletonFrame.CopySkeletonDataTo(skeletons);

        Skeleton skeleton = (from s in skeletons
                                where s.TrackingState == SkeletonTrackingState.Tracked
                                select s);
        if (skeleton == null)
            return;

        if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
        {
            writer.Write("{0} {1}@", frames, timestamp);//I dont know how you want to do this
            foreach (Joint joint in skeleton.Joints)
            {
                writer.Write(joint.Position.X + "," + joint.Position.Y + "," joint.Position.Z + ",");
            }
            writer.Write(Environment.NewLine);
        }
    }
}

这将获取检测到的骨架的关节,并将它们写入文件而不指定其相对关节,但它是关节类型的默认顺序。请注意,这是与kinect传感器的距离。

答案 1 :(得分:1)

谢谢你,但这行中有一个'骷髅问题: 骨架骨架=(从骨架中的s,其中s.TrackingState == SkeletonTrackingState.Tracked select s);

System.IO.FileStream fs = new System.IO.FileStream(@" F:\ Kinect Install \ SkeletonBasics-WPF \ Coordinates.txt",FileMode.Append,FileAccess.Write,FileShare.None );         int frame = 0;         Skeleton [] skeletons = new Skeleton [0];

    public void AllFramesReady(object sender, AllFramesReadyEventArgs e)
    {
        StreamWriter sw = new StreamWriter(fs);
        frame++;
        using (SkeletonFrame sFrame = e.OpenSkeletonFrame())
        {
            if (sFrame == null) return;

            sFrame.CopySkeletonDataTo(skeletons);
            Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s);
            if (skeleton == null)
                return;

            if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
            {
                foreach (Joint joint in skeleton.Joints)
                {
                    sw.WriteLine(joint.Position.X + "," + joint.Position.Y + "," + joint.Position.Z + ",");
                }
                //writer.Write(Environment.NewLine);
                sw.Flush();
                sw.Close();
            }
        }
    }
相关问题