2

我正在使用 Kinect SDK 1.6,并且我正在关注Windows Kinect 快速入门系列的骨架跟踪功能教程,可在此处获得。

即使这些教程是针对 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;

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

4

4 回答 4

8

如果你对 Coding4Fun 有正确的参考,你实际上只是错过了这个:

using Coding4Fun.Kinect.Wpf;

在代码的开头。

于 2012-11-10T09:50:24.027 回答
5

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

http://c4fkinect.codeplex.com/

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

请记住添加正确的 using 指令:

using Coding4Fun.Kinect.Wpf;

如何在 C# 中使用新的 Kinect SDK 缩放关节

于 2012-11-16T17:33:27.140 回答
2

缩放是 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;
}
于 2012-11-09T17:42:37.560 回答
0
you can fix the error using this dll file


http://c4fkinect.codeplex.com/releases/view/76271
于 2013-06-30T15:39:17.773 回答