Vit*_*ile 4 c# kinect kinect-sdk
我知道如何转换从Joint.Position.X和获得的值的像素Joint.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 };
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想要做的是使用获得真实深度(以毫米为单位)Joint.Depth.Z.参考前面的例子,我想获得两个3D数组,rightHandPosition并leftHandPosition使用代表深度的最后一个坐标.什么是正确的公式,以毫米为单位转换返回的值rightHand.Position.Z和leftHand.Position.Z相应的值?
编辑:用于在上面的代码中以像素为单位转换X和Y坐标的公式是错误的.请阅读我的以下答案.
我已经意识到Joint.Position.X并且Joint.Position.Y不限于-1和1.这个错误的信息在互联网上非常分散,这就是我回复自己的原因.
正如Evil Closet Monkey所提到的,在上面的评论中,官方文档说" 骨架空间坐标以米为单位 ".这篇文章还证实了Kinect for Windows Team的成员.
这意味着,以转化X,Y,Z坐标,以获得Joint.Position.X,Joint.Position.Y并且Joint.Position.Z,以毫米为单位,您只需通过1000来划分这些值(或者你也可以在米工作,没有转换需要).
| 归档时间: |
|
| 查看次数: |
3532 次 |
| 最近记录: |