SDK v1.5 を使用してスケルトンの周りに長方形を描く方法を知りたかった
私がやりたいことは、ジェスチャーが認識されると、スケルトンの周りに赤い長方形が表示されることです。
どんな助けでも大歓迎です。
よろしく、
アーメド
このコードはすぐには機能しません。使用するアルゴリズムとメソッドを提供することを目的としています。
SkeletonPoint maxX = joints[0].Position, minX = joints[0].Position;
SkeletonPoint maxY = joints[0].Position, minY = joints[0].Position;
for(joint in joints){
if(joint.Position.x>maxX) maxX = joint.Position;
if(joint.Position.x<minX) minX = joint.Position;
if(joint.Position.y>maxY) maxY = joint.Position;
if(joint.Position.y<minY) minY = joint.Position;
}
// Adding a margin, because the articulations are not always placed
// at the extremities. Can adjust to get a better look.
float margin = .10f // 10 cm margin.
maxX.X += margin;
maxY.Y += margin;
minX.X -= margin;
minY.Y -= margin;
// Now we need to convert it to the video stream space.
DepthImagePoint maxXd = depthImageFrame.MapFromSkeletonPoint(maxX);
ColorImagePoint maxXc = depthImageFrame.MapToColorImagePoint(maxXd);
// **
// Same for other coordinates.
// **
// The buffer b will contains the current image, in bitmap format
// (without header). You may use colorImageFrame.Format to get more
// details on its encoding.
byte[] b = new byte[PixelDataLength];
colorImageFrame.CopyPixelDataTo(b);
// Then transform the buffer b into whatever you want,
// and draw the rect [[maxXc,maxYc],[minXc,minYc]] over it
// before rendering.
このようにして、最も外側になる可能性のあるジョイントだけでなく、最も外側のジョイントを取得します。
バイト配列を変換する方法はあなたに任されており、レンダリング方法によって異なります。
Kinect SDKを使用していると仮定すると、これは比較的簡単です。私はキャンバスを使用して、頭、足、腰、手の座標を取得しているので、ボックスをどのように描画するかがわかっているので、両側にさらに数ピクセルを追加します。私はアルゴリズムを使用しています:
|(heady + 25)-(feety-25)| * |(righthandx + 25)-(lefthandx-25)|
ボックスの高さを取得します。私は||を使用しています この場合の絶対値
次に、キャンバス(およびジョイント)を配置すると、次を使用してそれらの座標を取得できます。
Canvas.GetTop(element / 2);
Canvas.GetLeft(element / 2); // /2 so that we get the center
次に、私のアルゴリズムを使用して、ボックスを作成する大きさを見つけることができます。要素は左上隅に配置されるため、ヘッドの座標+ Yのビット、および右手のx+を使用して配置できます。 Xのように少し。あなたはそれを使用して配置することができます
Canvas.SetTop(ycoord, box);
Canvas.SetLeft(xcoord, box);
オブジェクトとボックスの間に少しスペースがあるように、ビットを追加します。
お役に立てれば。
すべてのコードを作成したら、投稿します