Kinect绘画C#,WPF,SDK Kinect [英] Kinect painting C#, WPF, SDK Kinect

查看:134
本文介绍了Kinect绘画C#,WPF,SDK Kinect的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是这个网站的新手,我真的需要您的帮助或只是一些建议.

I am new on this site and I really need your help or just a piece of advice guys.

有人知道该怎么做或可以帮助我制作一款与此类似的应用程序吗?

Does anyone know how to do or can help me with making a app similar to this one ?

使用Kinect在InkCanvas WPF中绘制平滑线

内联链接

或类似的东西

内联链接

我知道如何访问我的Kinect,检测和跟踪每个关节等.我唯一不了解的问题是我真的不知道如何制作将要跟踪的功能,例如正确的并在画布上画一条线.

I know how to access my Kinect, detect and track each of the joint etc. The only thnig i do not know and with I have problems is that i really do not know how to make a function that will track for example right hand and draw a line on canvas.

有人可以帮助我吗?

推荐答案

这里有很多示例:

powerpoint控件示例向您展示如何检测和跟踪手,甚至如何检测某些手势.

The powerpoint control example show you how to detect and track the the hands, and even how to detect some gestures.

下面是PowerPoint控件的示例,在下面的代码中,我向您展示了如何用椭圆形跟踪我的手:

Following the example of powerpoint control, in the following code i show you how to track my hands with an ellipse:

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放在您要绘画的代码中即可.

This is a method from Microsoft SDK that is called everytime Kinect traks efficiently you skeleton. You just have to put your code for Painting whatever you want where i have my SetEllipsePosition and SetImagePosition.

这篇关于Kinect绘画C#,WPF,SDK Kinect的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆