2016-11-02 6 views
2

Как указано. У меня возникла проблема с преобразованием System.Drawing.Image в Emgu.CV.Mat Я попытался скрыть его от Drawing.Image до CV.Image, но сохранил исключения.System.Drawing.Image to Emgu.CV.Mat

Есть ли другие решения? Любую помощь можно получить.

ответ

3

В OpenCV или EmguCV IMage есть заголовок Mat. Трюк, который я нашел, заключался в том, чтобы получить System.Drawing.Image в изображение <>. Если у вас возникли проблемы с исключениями, убедитесь, что вы компилируете для x64, если используете EmguCV 3.1.

Вот простой способ, чтобы получить Mat объект:

private Mat GetMatFromSDImage(System.Drawing.Image image) 
{ 
    int stride = 0; 
    Bitmap bmp = new Bitmap(image); 

    System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height); 
    System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat); 

    System.Drawing.Imaging.PixelFormat pf = bmp.PixelFormat; 
    if (pf == System.Drawing.Imaging.PixelFormat.Format32bppArgb) 
    { 
     stride = bmp.Width * 4; 
    } 
    else 
    { 
     stride = bmp.Width * 3; 
    } 

    Image<Bgra, byte> cvImage = new Image<Bgra, byte>(bmp.Width, bmp.Height, stride, (IntPtr)bmpData.Scan0); 

    bmp.UnlockBits(bmpData); 

    return cvImage.Mat; 
} 

Надеется, что это помогает! Doug

+0

Thanks AeroClassics! Отлично работает. –

+0

Добро пожаловать! Рад, что смог помочь. – AeroClassics

+0

Пожалуйста, отметьте это как ответ, если хотите. – AeroClassics

 Смежные вопросы

  • Нет связанных вопросов^_^