【问题标题】:Kinect painting C#, WPF, SDK KinectKinect 绘画 C#、WPF、SDK Kinect
【发布时间】:2014-09-01 13:06:21
【问题描述】:

我是这个网站的新手,我真的需要你的帮助或者只是一个建议。

有谁知道怎么做或可以帮助我制作一个类似的应用程序吗?

Draw smooth line in InkCanvas WPF with Kinect

Inline Link

或者类似的东西

Inline Link

我知道如何访问我的 Kinect、检测和跟踪每个关节等。我不知道并且遇到问题的唯一问题是我真的不知道如何制作一个可以跟踪例如正确的功能用手在画布上画一条线。

谁能帮帮我?

【问题讨论】:

    标签: c# wpf sdk kinect


    【解决方案1】:

    这里有很多例子:

    PowerPoint 控制示例向您展示如何检测和跟踪手,甚至如何检测一些手势。

    编辑:

    按照 powerpoint 控制的示例,在下面的代码中,我将向您展示如何用椭圆跟踪我的手:

    void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
            {
                try
                {
                    using (var skeletonFrame = e.OpenSkeletonFrame())
                    {
                        if (skeletonFrame == null)
                            return;
    
                        if (skeletons == null ||
                            skeletons.Length != skeletonFrame.SkeletonArrayLength)
                        {
                            skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                        }
                        skeletonFrame.CopySkeletonDataTo(skeletons);
                    }
                    Skeleton closestSkeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
                                                        .OrderBy(s => s.Position.Z * Math.Abs(s.Position.X))
                                                        .FirstOrDefault();
                    if (closestSkeleton == null)
                        return;
    
                    var rightFoot = closestSkeleton.Joints[JointType.FootRight];
                    var leftFoot = closestSkeleton.Joints[JointType.FootLeft];
                    var rightHand = closestSkeleton.Joints[JointType.HandRight];
                    var leftHand = closestSkeleton.Joints[JointType.HandLeft];
    
                    if (rightFoot.TrackingState == JointTrackingState.NotTracked ||
                        rightHand.TrackingState == JointTrackingState.NotTracked ||
                        leftHand.TrackingState == JointTrackingState.NotTracked)
                    {
                        //Don't have a good read on the joints so we cannot process gestures
                        return;
                    }
    
                    CoordinateMapper mapper = sensor.CoordinateMapper;
                    var point = mapper.MapSkeletonPointToColorPoint(closestSkeleton.Joints[JointType.Head].Position, sensor.ColorStream.Format);
                    var point1 = mapper.MapSkeletonPointToColorPoint(rightHand.Position, sensor.ColorStream.Format);
                    var point2 = mapper.MapSkeletonPointToColorPoint(leftHand.Position, sensor.ColorStream.Format);
                        // - Put Your Draw Code Here insted of the following:
                        SetEllipsePosition(ellipseRightFoot, rightFoot, false);
                        SetEllipsePosition(ellipseLeftFoot, leftFoot, false);
                        SetEllipsePosition(ellipseLeftHand, leftHand, isBackGestureActive);
                        SetEllipsePosition(ellipseRightHand, rightHand, isForwardGestureActive);
                        SetImagePosition(punhal, rightHand);
                        SetImagePosition2(punhal2, leftHand);
                        // -------------------------------------------------
                catch
                {
                    myException(this, new EventArgs());
                }
            }
    

    这是来自 Microsoft SDK 的一种方法,每次 Kinect 有效地跟踪您的骨架时都会调用该方法。您只需将您的代码用于绘制任何您想要的东西,我有我的 SetEllipsePosition 和 SetImagePosition。

    【讨论】:

    • 感谢您的关注,但正如我所写,我知道如何跟踪每个关节我正在尝试创建简单的应用程序来跟踪右手腕/手的位置并在画布上画线我知道如何跟踪手腕/手,但我不知道如何在画布或inkcanvas或图像或位图上画线,这是我唯一的问题有人有什么建议吗?
    • 我们之间有些误会。我知道如何用鼠标/功能在画布上绘画。我对这样的事情很感兴趣 (youtube.com/watch?v=_leF3v1vm_o) 我不知道如何在我的手部运动会在画布上画一条线的地方制作功能。这是我的问题。
    • 如果您已经知道如何跟踪骨骼,那么您已经知道它们在画布中的相对位置,对吧?所以,你唯一需要做的就是画画,画一条线,创建一个图像或任何你想要的东西......如果你说你已经知道如何在你的画布上画一些东西,道歉,但我不明白你的问题:)
    • 我知道如何跟踪每个关节以及如何在画布上绘画,但我不知道如何将其连接到一个简单的功能/解决方案中。我被困在这一点上,这真的很烦人:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    相关资源
    最近更新 更多