使用kinect在骨架周围绘制矩形

时间:2012-08-27 11:24:43

标签: c# kinect

我想知道如何使用SDK v1.5

在骨架周围绘制一个矩形

我想要做的是,当识别出手势时,骨架周围会出现一个红色矩形。

任何帮助都将不胜感激。

此致

艾哈迈德

2 个答案:

答案 0 :(得分:4)

此代码不会立即生效,它旨在提供使用的算法和方法。

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.

这样你就得到了最外面的关节,而不仅仅是可能是最外面的关节。

转换字节数组的方法留给你,这取决于你的rending方法。

答案 1 :(得分:1)

假设您使用的是Kinect SDK,这相对容易。我正在使用画布并获得头部,脚部,臀部和手部的坐标,因此我知道要在框架周围绘制什么,然后在每侧添加几个像素。我正在使用算法:

  
    

|(heady + 25) - (可爱 - 25)| * |(righthandx + 25) - (lefthandx - 25)|

  

获得盒子高度。 我正在使用||在这种情况下的绝对值

然后,一旦放置了画布(和关节),就可以使用以下方法获取坐标:

Canvas.GetTop(element / 2);
Canvas.GetLeft(element / 2); // /2 so that we get the center

然后你可以使用我的算法来找出制作盒子的大小,并且因为元素的左上角放置了,你可以使用heady的坐标将它放置为Y,右边的坐标手x +有点作为X.您可以使用

放置它
Canvas.SetTop(ycoord, box);
Canvas.SetLeft(xcoord, box);

我添加了这个位,所以在对象和盒子之间有一点空间。
希望这会有所帮助。
当我计算出所有代码时,我会将其发布