2017-01-19 9 views
1

У меня есть WritableBitmap, и я хотел бы преобразовать его в Matrix EmguCV/OpenCV. Как мне это сделать? Я пробовал несколько цепочных решений (WritableBitmap -> Bitmap -> Карта) из кода онлайн, но я ничего не нашел, что работает. Благодаря!Как вы конвертируете C# WritableBitmap в Matrix EmguCV/OpenCV?

+0

Вы видите [эту ссылку] (http://stackoverflow.com/a/37383502/2050745) и пытается? –

+0

@NejcGalof Да, я видел этот ответ. Однако это для C++, а не C#, поэтому он не работает. –

ответ

0

Я считаю, что это работает очень хорошо:

public static Mat ToMat(BitmapSource source) 
    { 
     if (source.Format == PixelFormats.Bgra32) 
     { 
      Mat result = new Mat(); 
      result.Create(source.PixelHeight, source.PixelWidth, DepthType.Cv8U, 4); 
      source.CopyPixels(Int32Rect.Empty, result.DataPointer, result.Step * result.Rows, result.Step); 
      return result; 
     } 
     else if (source.Format == PixelFormats.Bgr24) 
     { 
      Mat result = new Mat(); 
      result.Create(source.PixelHeight, source.PixelWidth, DepthType.Cv8U, 3); 
      source.CopyPixels(Int32Rect.Empty, result.DataPointer, result.Step * result.Rows, result.Step); 
      return result; 
     } 
     else if (source.Format == PixelFormats.Pbgra32) 
     { 
      Mat result = new Mat(); 
      result.Create(source.PixelHeight, source.PixelWidth, DepthType.Cv8U, 4); 
      source.CopyPixels(Int32Rect.Empty, result.DataPointer, result.Step * result.Rows, result.Step); 
      return result; 
     } 
     else 
     { 
      throw new Exception(String.Format("Conversion from BitmapSource of format {0} is not supported.", source.Format)); 
     } 
    } 

Дуга