【问题标题】:Kinect SDK 1.6 and Joint.ScaleTo methodKinect SDK 1.6 和 Joint.ScaleTo 方法
【发布时间】:2012-11-09 17:30:33
【问题描述】:

我正在使用 Kinect SDK 1.6,并且我正在学习 Windows Kinect 快速入门系列骨架跟踪功能教程,here

即使这些教程是针对 SDK 1.0 制作的,在我按照说明将我的手的位置映射到自定义大小的窗口(例如 1280x720)之前,一切都进展顺利

Dan Fernandez 正在使用以下代码行来实现这一目标

    private void ScalePosition(FrameworkElement element, Joint joint)
    {
        // Convert the value to X/Y;
        Joint scaledJoint = joint.ScaleTo(1280, 720);

        ....
    }    

嗯,ScaleTo这个方法不是自定义函数,应该是Kinect SDK中提供的,但是我的编辑说没有这个方法。我找不到它,我认为它可能自 SDK 1.0 以来已被移动/重命名/其他任何东西。

只是为了确保一切正常,这是我的using 列表,其他一切(骨骼跟踪等)都在工作,所以我真的想不通

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

using Microsoft.Kinect;
using Microsoft.Kinect.Toolkit;
using Microsoft.Samples.Kinect.WpfViewers;

我可以根据要求提供有关我的代码的更多详细信息。

【问题讨论】:

    标签: wpf kinect kinect-sdk


    【解决方案1】:

    如果您对 Coding4Fun 有正确的参考,那么您实际上只是错过了这一点:

    using Coding4Fun.Kinect.Wpf;
    

    在代码的开头。

    【讨论】:

      【解决方案2】:

      如果您需要ScaleTo(),您可以将此 SDK 与最新的 Microsoft SDK 结合使用:

      http://c4fkinect.codeplex.com/

      它是开源的,因此您也可以使用他们的代码并拥有自己的ScaleTo()

      记得添加正确的 using 指令:

      using Coding4Fun.Kinect.Wpf;
      

      how to scale joints using the new Kinect SDK in C#

      【讨论】:

        【解决方案3】:

        缩放是 Coding4Fun 库的一部分,可在此处获得: http://c4fkinect.codeplex.com/

        或者,您可以编写自己的缩放比例。

        这样的东西会为右手创建一个跟踪的“命中框”,以右肩为中心,并将其缩放到主屏幕的分辨率。

        double xScaled = (rightHand.Position.X - leftShoulder.Position.X) / ((rightShoulder.Position.X - leftShoulder.Position.X) * 2) * SystemParameters.PrimaryScreenWidth;
        double yScaled = (rightHand.Position.Y - head.Position.Y) / (rightHip.Position.Y - head.Position.Y) * SystemParameters.PrimaryScreenHeight;
        

        这是另一个将 Kinect 坐标缩放到屏幕分辨率的函数示例:

        private static double ScaleY(Joint joint)
        {
            double y = ((SystemParameters.PrimaryScreenHeight / 0.4) * -joint.Position.Y) + (SystemParameters.PrimaryScreenHeight / 2);
            return y;
        }
        
        private static void ScaleXY(Joint shoulderCenter, bool rightHand, Joint joint, out int scaledX, out int scaledY)
        {
            double screenWidth = SystemParameters.PrimaryScreenWidth;
        
            double x = 0;
            double y = ScaleY(joint);
        
            // if rightHand then place shouldCenter on left of screen
            // else place shouldCenter on right of screen
            if (rightHand)
            {
                x = (joint.Position.X - shoulderCenter.Position.X) * screenWidth * 2;
            }
            else
            {
                x = screenWidth - ((shoulderCenter.Position.X - joint.Position.X) * (screenWidth * 2));
            }
        
        
            if (x < 0)
            {
                x = 0;
            }
            else if (x > screenWidth - 5)
            {
                x = screenWidth - 5;
            }
        
            if (y < 0)
            {
                y = 0;
            }
        
            scaledX = (int)x;
            scaledY = (int)y;
        }
        

        【讨论】:

        • 谢谢,但我已经下载了 Coding4Fun 库并添加了参考(与 WPF 相关的),但它不起作用..
        • 您上面的using 代码块不包含对它的引用。您是否忘记将其添加为参考或打卡到using 部分?
        【解决方案4】:
        you can fix the error using this dll file
        
        
        http://c4fkinect.codeplex.com/releases/view/76271
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多