gpt4 book ai didi

c# - Kinect:以毫米为单位转换 Joint.Position.Z

转载 作者:太空狗 更新时间:2023-10-30 00:32:48 28 4
gpt4 key购买 nike

我知道如何以像素为单位转换从 Joint.Position.XJoint.Position.Y 获得的值。我有一个例子:

void kinectSensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
if (skeletonFrame != null)
{
Skeleton[] skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength]; //conterrà tutti gli skeleton

skeletonFrame.CopySkeletonDataTo(skeletonData);

Skeleton playerSkeleton = (from s in skeletonData where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();

if (playerSkeleton != null)
{
Joint rightHand = playerSkeleton.Joints[JointType.HandRight];
Joint leftHand = playerSkeleton.Joints[JointType.HandLeft];

//EDIT: The following formulas used to convert X and Y coordinates in pixels are wrong.
//Please, see the answer for details
rightHandPosition = new float[] { (((0.5f * rightHand.Position.X) + 0.5f) * (640)), (((-0.5f * rightHand.Position.Y) + 0.5f) * (480)) };
leftHandPosition = new float[] { (((0.5f * leftHand.Position.X) + 0.5f) * (640)), (((-0.5f * leftHand.Position.Y) + 0.5f) * (480)), leftHand.Position.Z };
}
}
}
}

现在,我想要做的是使用 Joint.Depth.Z 获取真实深度(以毫米为单位)。参照前面的示例,我想获得两个 3D 数组,分别为 rightHandPositionleftHandPosition,最后一个坐标表示深度。将 rightHand.Position.ZleftHand.Position.Z 返回的值转换为相应的毫米值的正确公式是什么?

编辑:上面代码中用于转换像素 X 和 Y 坐标的公式是错误的。请阅读我的以下回答。

最佳答案

我已经意识到 Joint.Position.XJoint.Position.Y 不限于 -1 和 1 之间。这个错误的信息在互联网上传播得很广,这就是我回复自己的原因。

作为Evil Closet Monkey在上面的评论中提到了 official documentation表示“骨架空间坐标以米表示”。在 this post 中,Kinect for Windows 团队的一名成员也证实了这一点.

表示为了转换X、Y、Z坐标,用Joint.Position.XJoint.Position.YJoint得到。 Position.Z,以毫米为单位,您只需将这些值除以 1000(或者您也可以以米为单位,无需转换)。

关于c# - Kinect:以毫米为单位转换 Joint.Position.Z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15390720/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com