Как нарисовать ограничивающую рамку вокруг рамки bodyIndex
Я пытаюсь сделать ограничивающую рамку вокруг кадров bodyIndex. Однако я не могу этого сделать, потому что не знаю, как получить точки каждого тела в кадре bodyIndex. Я не знаю, думаю ли я об этом правильно в любом случае. Это мой код до сих пор:
void Reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e)
{
var reference = e.FrameReference.AcquireFrame();
//BodyIndex
using (var frame = reference.BodyIndexFrameReference.AcquireFrame())
{
//canvas.Children.Clear();
if (frame != null)
{
_bodyIndexProcessed = false;
// allocate space to put the pixels being converted
bodyIndexPixels = new uint[frame.FrameDescription.Width * frame.FrameDescription.Height];
//if (_mode == Mode.BodyIndex)
if(_displayBodyIndex == true)
{
// _displayBody = false;
// the fastest way to process the body index data is to directly access
// the underlying buffer
using (Microsoft.Kinect.KinectBuffer bodyIndexBuffer = frame.LockImageBuffer())
{
// create the bitmap to display
var bodyIndexBitmap = new WriteableBitmap(frame.FrameDescription.Width, frame.FrameDescription.Height, 96.0, 96.0, PixelFormats.Bgra32, null);
// verify data and write the color data to the display bitmap
if (((frame.FrameDescription.Width * frame.FrameDescription.Height) == bodyIndexBuffer.Size) &&
(frame.FrameDescription.Width == bodyIndexBitmap.PixelWidth) && (frame.FrameDescription.Height == bodyIndexBitmap.PixelHeight))
{
ProcessBodyIndexFrameData(bodyIndexBuffer.UnderlyingBuffer, bodyIndexBuffer.Size);
_bodyIndexProcessed = true;
bodyIndexBitmap.WritePixels(
new Int32Rect(0, 0, bodyIndexBitmap.PixelWidth, bodyIndexBitmap.PixelHeight),
bodyIndexPixels,
bodyIndexBitmap.PixelWidth * (int)BytesPerPixel,
0);
//send bodyIndex to camera(image)
camera.Source = bodyIndexBitmap;
}
}
}
}
}
}
private unsafe void ProcessBodyIndexFrameData(IntPtr bodyIndexFrameData, uint bodyIndexFrameDataSize)
{
byte* frameData = (byte*)bodyIndexFrameData;
// convert body index to a visual representation
for (int i = 0; i < (int)bodyIndexFrameDataSize; ++i)
{
// the BodyColor array has been sized to match
// BodyFrameSource.BodyCount
if (frameData[i] < BodyColor.Length)
{
// this pixel is part of a player,
// display the appropriate color
this.bodyIndexPixels[i] = BodyColor[frameData[i]];
}
else
{
// this pixel is not part of a player
// should display transparent, not black...
this.bodyIndexPixels[i] = 0xFF000000;
}
}
}
Это простой код, который просто рисует bodyIndex в прямоугольнике. Я хочу, чтобы можно было нарисовать еще один прямоугольник, используя точки, предоставленные рамкой bodyIndex, и как найти точки максимума, минимума и нарисовать прямоугольник вокруг тел. Это оно! Клянусь, я пытаюсь найти некоторые примеры, но я нашел лишь несколько советов о том, как ограничить рамку вокруг лиц, используя Kinect API.
Может быть, вы можете помочь мне понять, как начать делать это. Пожалуйста?