System.Drawing.Image到Emgu.CV.Mat

时间:2016-11-02 16:03:17

标签: c# emgucv

标题为。我有一个将System.Drawing.Image转换为Emgu.CV.Mat的问题 我试图将它从Drawing.Image转换为CV.Image,但继续使用Exceptions。

还有其他解决方案吗?任何帮助渲染都很受欢迎。

1 个答案:

答案 0 :(得分:6)

OpenCV或EmguCV IMage中有一个Mat头。我发现的技巧是将System.Drawing.Image放入Image<>中。如果您遇到异常问题,请确保在使用EmguCV 3.1时编译x64。

以下是获取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;
}

希望这有帮助! 道格