Как преобразовать тип ImageColorFrame в Kinect для Windows SDK v1 в тип изображения <> в Emgu Cv? - PullRequest
0 голосов
/ 07 февраля 2012

В настоящее время я работаю над приложением WPF для обнаружения лиц, используя Emgu CV и Kinect для Windows SDK v1.Я когда-либо делал то же самое приложение с Emgu CV, но с помощью веб-камеры, чтобы захватить кадр изображения.Используя веб-камеру, несложно получить кадр камеры и преобразовать его в тип изображения <> в Emgu CV, чтобы я мог обработать его с помощью алгоритма распознавания лиц.Но сейчас, когда я использую цветную RGB камеру из аппаратного обеспечения Kinect, я не могу этого сделать.Ни явное, ни явное преобразование из типа ImageColorFrame (в Kinect для Windows SDK) в тип Image <> (в Emgu CV) не работают.Как я мог это сделать?

К вашему сведению, вместо того, чтобы делать преобразование, я также пытаюсь назначить свойство байтов типа Image <> как этот код ниже.Но это тоже не работает.Заранее спасибо.

using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
        {
            if (colorFrame == null)
            {
                return;
            }

            byte[] pixels = new byte[colorFrame.PixelDataLength];
            colorFrame.CopyPixelDataTo(pixels);

            nextFrame = new Image<Bgr, byte>(448, 336);
            nextFrame.Bytes = pixels;
            using (nextFrame.Bitmap = colorFrame.ToBitmap())
            {
                grayImage = new Image<Gray, byte>(448, 336);
                grayImage = nextFrame.Convert<Gray, Byte>();
                HaarCascade faceHaarCascade = new HaarCascade("" + Environment.CurrentDirectory + "\\haarcascade_frontalface_alt_tree.xml");

                MCvAvgComp[][] facesDetected = grayImage.DetectHaarCascade(
                   faceHaarCascade,
                   1.1,
                   10,
                   Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
                   new System.Drawing.Size(20, 20));

                foreach (MCvAvgComp face in facesDetected[0])
                {
                    // draw rectangle in the facial image
                    nextFrame.Draw(face.rect, new Bgr(System.Drawing.Color.Blue), 2);
                }
                imageVideoRGB.Source = ToBitmapSource(nextFrame);
            }
        }

1 Ответ

0 голосов
/ 23 апреля 2013

Чтобы преобразовать Microsoft.Kinect.ImageColorFrame в Emgu.CV.Image, попробуйте следующее:

var bitmapSource = colorImageFrame.ToBitmapSource(); // using Coding4Fun.Kinect.Wpf extension
//Get a bitmap
var currentImage = KinectHelpers.GetBitmapFromBitmapSource(ColorBitmap);
// Then get the Image
var image = new Image<Bgr, Byte>(currentImage)

С KinectHelpers статический класс:

public static class KinectHelpers
{
    public static Bitmap GetBitmapFromBitmapSource(BitmapSource bSource)
    {
        Bitmap bmp;
        using (MemoryStream ms = new MemoryStream())
        {
            BitmapEncoder enc = new BmpBitmapEncoder();
            enc.Frames.Add(BitmapFrame.Create(bSource));
            enc.Save(ms);
            bmp = new Bitmap(ms);
        }
        return bmp;
    }
}
...