0

私は kinect プログラミングが初めてで、スケルトンをマップしようとしていますが、正しく動作していません。kinect SDK の 1.6 バージョンを使用していて、コードが実行されますが、この部分に到達すると停止します。

void kinectsensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
           SkeletonFrame skeletonSet = e.OpenSkeletonFrame();

     //   Skeleton skeletonData = new Skeleton[kinectsensor.SkeletonStream.FrameSkeletonArrayLength];

        **Skeleton skeletonData = (from s in skeletons
                             where s.TrackingState == SkeletonTrackingState.Tracked
                             select s).FirstOrDefault();**
        if (skeletonData != null)


        {
            SetEllipsePosition(Head, skeletonData.Joints[JointType.Head]);
            SetEllipsePosition(leftHand, skeletonData.Joints[JointType.HandLeft]);
            SetEllipsePosition(rightHand, skeletonData.Joints[JointType.HandRight]);
            ProcessGesture(skeletonData.Joints[JointType.Head], skeletonData.Joints[JointType.HandLeft], skeletonData.Joints[JointType.HandRight]);
        }
    }

私が得る警告メッセージは次のとおりです。

「KinectSkeletonApplication3.MainWindow.skeletons」が割り当てられることはなく、常にデフォルト値が null になります。

4

2 に答える 2

0

典型的なSkeletonFrameReadyコールバックは次のようになります。

private Skeleton[] skeletonData;

private void SkeletonsReady(object sender, SkeletonFrameReadyEventArgs e)
{
    using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
    {
        if (skeletonFrame != null)
        {
            int skeletonSlot = 0;

            if ((this.skeletonData == null) || (this.skeletonData.Length != skeletonFrame.SkeletonArrayLength))
            {
                this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
            }

            skeletonFrame.CopySkeletonDataTo(this.skeletonData);

            foreach (Skeleton skeleton in this.skeletonData)
            {
                if (SkeletonTrackingState.Tracked == skeleton.TrackingState)
                {
                    // `skeleton` is an actively tracked skeleton
                }
            }
        }
    }
}

この例は、Kinect for Windows Developer ToolkitおよびKinect for Windows CodePlexサイトで見つけることができます。

于 2013-04-12T00:54:18.613 に答える
0

Kinect のプログラミングについてはよくわかりませんが、おそらくcopySkeletonDataTo()を使用して、何かからスケルトン配列を割り当てる必要があります。

于 2013-04-11T19:19:16.543 に答える