Как нарисовать ограничивающую рамку вокруг рамки 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.

Может быть, вы можете помочь мне понять, как начать делать это. Пожалуйста?

0 ответов

Другие вопросы по тегам