Из примера DepthBasics-WPF в "Kinect \ Developer Toolkit v1.8.0 \ Samples \ C#" я пытался использовать OpenCV с оболочкой Emgu 4.2. Пример кода возвращает WriteableBitmap, который заполняется в объект выходного изображения WPF. Я преобразую это в растровое изображение, а затем в изображение OpenCV (см. «OutputImg»), но оно выдает исключение «Неизвестный тип массива» (см. Строку 4 в коде). Почему-то я не понимаю различные форматы массивов изображений. Кто-нибудь может помочь?
var bitmap = BitmapFromWriteableBitmap(colorBitmap);
var inputImg = bitmap.ToImage<Emgu.CV.Structure.Bgr, byte>();
var outputImgPtr = CvInvoke.cvCreateImage(new System.Drawing.Size(640, 480), Emgu.CV.CvEnum.IplDepth.IplDepth_8U, 3);
var outputImg = Emgu.CV.Image<Emgu.CV.Structure.Bgr, byte>.FromIplImagePtr(outputImgPtr);
var backSubDepth = new Emgu.CV.BackgroundSubtractorKNN(500, 400, false);
//var backSubRgb = new Emgu.CV.BackgroundSubtractorKNN(500, 50, false);
Emgu.CV.BackgroundSubtractorExtension.Apply(backSubDepth, inputImg, outputImg, -1);
var outputBitmap = outputImg.AsBitmap<Emgu.CV.Structure.Bgr, byte>();
var bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(outputBitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
var writeableBitmap = new WriteableBitmap(bitmapSource);
colorBitmap = writeableBitmap;
// 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 * sizeof(int),
0);