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 };
}
}
}
}
さて、私がやりたいのは、を使用して実際の深さ(ミリメートル単位)を取得することですJoint.Depth.Z
。前の例を参照して、との2つの3D配列を取得rightHandPosition
しleftHandPosition
、最後の座標が深度を表します。rightHand.Position.Z
対応する値から返されるleftHand.Position.Z
値をミリメートル単位で変換するための正しい式は何ですか?
編集:上記のコードでピクセル単位のX座標とY座標を変換するために使用される式が間違っています。私の次の答えを読んでください。