Kinect Depth и ИК-изображение в UWP (удалить цвет) - PullRequest
0 голосов
/ 05 августа 2020

Я работаю с Kinect V2 UWP C# для XBOX и windows. Для этого я следил за демонстрацией Kinect UWP . Мне удалось прочитать и отобразить кадры, как показано в Образец кадра камеры , но я заметил, что изображения глубины и ИК-изображения, например, цветные: Kinect studio и вывод приложения UWP

Я новичок в этом, и пытался найти, но не нашел четкого ответа. Кто-нибудь может помочь? Я был бы очень признателен за это.

1 Ответ

0 голосов
/ 11 августа 2020

Я много пробовал и наконец нашел способ получать изображения без псевдоцветов.

Поскольку XAML отображается только в формате Bgra8, его нужно было преобразовать. Это помогло обрабатывать кадры отдельно по цвету и глубине.

Мне также нужно было обновить мою Windows 10 версию до 10.0.19041.0 или более поздней.

//clrFrame.
            var buffFrame = clrFrame?.BufferMediaFrame;
            
            // Get the Individual Frame
            var vidFrame = clrFrame?.VideoMediaFrame;
            {
                if (vidFrame == null) return;

                
                // create a UWP SoftwareBitmap and copy Frame into Bitmap
                SoftwareBitmap sbt = new SoftwareBitmap(vidFrame.SoftwareBitmap.BitmapPixelFormat, vidFrame.SoftwareBitmap.PixelWidth, vidFrame.SoftwareBitmap.PixelHeight);
                vidFrame.SoftwareBitmap.CopyTo(sbt);

                // PixelFormat needs to be in 8bit BGRA for Xaml writable bitmap
                if (sbt.BitmapPixelFormat != BitmapPixelFormat.Bgra8)
                    sbt = SoftwareBitmap.Convert(vidFrame.SoftwareBitmap, BitmapPixelFormat.Bgra8);
                
                if (source != null)
                {
                    // To write out to writable bitmap which will be used with ImageElement, it needs to run
                    // on UI Thread thus we use Dispatcher.RunAsync()...
                    var ignore = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        // This code runs on UI Thread
                        // Create the writableBitmap for ImageElement display
                        extBitmap = new WriteableBitmap(sbt.PixelWidth, sbt.PixelHeight);

                        // Copy contents from UWP software Bitmap
                        // There are other ways of doing this instead of the double copy, 1st copy earlier
                        // this is a second copy.
                        sbt.CopyToBuffer(extBitmap.PixelBuffer);
                        extBitmap.Invalidate();

                        // Set the imageElement source
                        var ig = source.SetBitmapAsync(sbt);
                        imgView.Source = source;

                    });

                }
            }

Помогает следующий пример проекта. с этой проблемой. Мне пришлось создать обработку для ИК и глубины и передать соответствующие параметры.

https://github.com/dngoins/KinectUWPApps/tree/master/WorkingWithMediaCaptureFramesSolution

...