Преобразование WriteableBitmap в Bitmap для использования в EmguCV

в моем коде я получаю WriteableBitmaps из массива байтов (в свою очередь из Kinect), и я хотел бы превратить их в растровые изображения для использования с EmguCV. В настоящее время это код, который у меня есть:

                // Copy the pixel data from the image to a temporary array
                colorFrame.CopyPixelDataTo(this.colorPixels);

                // Write the pixel data into our bitmap
                this.colorBitmap.WritePixels(
                    new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight),
                    this.colorPixels,
                    this.colorBitmap.PixelWidth * colorFrame.BytesPerPixel,
                    0);

                    BitmapEncoder encoder = new BmpBitmapEncoder();
                    encoder.Frames.Add(BitmapFrame.Create(colorBitmap));
                    MemoryStream ms = new MemoryStream();

                    encoder.Save(ms);
                    Bitmap b=new Bitmap(ms);

                    Image<Gray, Byte> img = new Image<Gray, Byte>(b);
                    img = img.ThresholdBinary(new Gray(200), new Gray(255));

Я получил нижнюю половину кода от здесь.Код компилируется и все такое, но зависает, когда я пытаюсь запустить программу (она должна выполнить некоторые операции над изображением, а затем преобразовать его обратно в формат, который может быть представлен как изображение.) Пауза моя код, а затем с помощью IntelliTrace в VS 2013, я получаю следующее исключение в Image<Gray, Byte> img = new Image<Gray, Byte>(b); "Система.ArgumentException было брошено: форматы URI не поддерживаются."Использование альтернативного кода, откуда я иду непосредственно из байта в растровое изображение, дает мне ту же ошибку. (код можно найти здесь.)

кто - нибудь получил советы о том, как решить эту ошибку, или альтернативные способы приведения к растровому изображению? Я новичок с C# & EmguCV, и я был бы очень признателен.

2 ответов


оказывается, весь код в порядке. Я не слишком уверен в технических деталях ошибки, но ошибка получена при попытке написать изображение Gray16 в WriteableBitmap (которое должно быть преобразовано в изображение Emgu.) Bgr565 или другие форматы поддерживаются, и я считаю, что Gray16 не был полностью реализован MS.если делать приложение WinForms, Format16bppGray также даст ту же ошибку.

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


У меня была та же проблема. Исключение "форматы URI не поддерживаются" не имело ничего общего с растровым изображением, но с загрузкой необходимых библиотек opencv. Я просто скопировал папки x86 и x64, включая opencv_core290.dll и другие в мой исполняемый каталог.