Вопрос по c# – Преобразование методов Kinect из бета-версии 2 в версию 1

1

Итак, я преобразовалgetDisplayPosition от бета-версии Kinect SDK до полной версии. Вот что у меня сейчас

The Original

<code> private Point getDisplayPosition(Joint joint)
    {
        float depthX, depthY;
        nui.SkeletonEngine.SkeletonToDepthImage(joint.Position, out depthX, out depthY);
        depthX = Math.Max(0, Math.Min(depthX * 320, 320));  //convert to 320, 240 space
        depthY = Math.Max(0, Math.Min(depthY * 240, 240));  //convert to 320, 240 space
        int colorX, colorY;
        ImageViewArea iv = new ImageViewArea();
        // only ImageResolution.Resolution640x480 is supported at this point
        nui.NuiCamera.GetColorPixelCoordinatesFromDepthPixel(ImageResolution.Resolution640x480, iv, (int)depthX, (int)depthY, (short)0, out colorX, out colorY);


        // map back to skeleton.Width & skeleton.Height
        return new Point((int)(skeleton.Width * colorX / 640.0), (int)(skeleton.Height * colorY / 480));
    }
</code>


My Version
<code>private Point getDisplayPosition(Joint joint)
    {
        float depthX, depthY;
        KinectSensor sensor = kinectSensorChooser1.Kinect;
        DepthImageFormat depth = DepthImageFormat.Resolution320x240Fps30;
        depthX = 320;
        depthY = 240;
        sensor.MapSkeletonPointToDepth(joint.Position, depth);
        depthX = Math.Max(0, Math.Min(depthX * 320, 320));
        depthY = Math.Max(0, Math.Min(depthY * 240, 240));
        int colorX, colorY;
        colorX = 320;
        colorY = 240;

        return new Point((int)(skeleton.Width * colorX / 640.0), (int)(skeleton.Height * colorY / 480));
    }
</code>

В основном я хочу знать, будет ли моя версия делать то же самое, что и оригинал, и если нет, как это исправить.

Я споткнулся об этом раньше, но все равно спасибо Liam McInroy
Ссылка на эту ссылку может вам помочь. Robrelyea.wordpress.com / 2012/02/01 / ... ravithejag

Ваш Ответ

1   ответ
2

что я сделал, и это работает для меня (это очень похоже на ваше) - надеюсь, это поможет:

Моя версия
private Point getDisplayPosition(DepthImageFrame depthFrame, Joint joint)
{ 
    float depthX, depthY;        
    DepthImagePoint depthPoint = kineticSensor.MapSkeletonPointToDepth(joint.Position, depthImageFormat);

    depthX = depthPoint.X;
    depthY = depthPoint.Y;

    depthX = Math.Max(0, Math.Min(depthX * 320, 320));
    depthY = Math.Max(0, Math.Min(depthY * 240, 240));

    int colorX, colorY;
    ColorImagePoint colorPoint = depthFrame.MapToColorImagePoint(depthPoint.X, depthPoint.Y, sensor.ColorStream.Format);
    colorX = colorPoint.X;
    colorY = colorPoint.Y;

    return new Point((int)(skeleton.Width * colorX / 640.0), (int)(skeleton.Height * colorY / 480));
}
Круто! Спасибо за вашу помощь Liam McInroy
О, но разве мне не нужно иметьDepthImageFrame? И это что-нибудь повлияет? И что такоеdepthImageFormat а такжеsensor? Liam McInroy
Извините, не могу дать щедрость по телефону: P Liam McInroy
apologies - редактирование блока кода вызывало неприятности. Forer
К вашему сведению, когда вы сказалиsensor.ColorStreamFormat, Я обнаружил, что это действительноsensor.ColorStream.Format, видеть как 'sensor не имеет определения дляColorStreamFormat' Liam McInroy

Похожие вопросы