【问题标题】:System.Drawing.Image to Emgu.CV.MatSystem.Drawing.Image 到 Emgu.CV.Mat
【发布时间】:2023-04-02 04:05:01
【问题描述】:

如标题。我在将 System.Drawing.Image 转换为 Emgu.CV.Mat 时遇到问题 我试图将其从 Drawing.Image 转换为 CV.Image 但仍然出现异常。

还有其他可用的解决方案吗?感谢您提供任何帮助。

【问题讨论】:

    标签: c# emgucv


    【解决方案1】:

    OpenCV 或 EmguCV 图像中有一个 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;
    }
    

    希望这会有所帮助! 道格

    【讨论】:

    • 我已经标记了答案,但由于声誉问题,我认为 stackoverflow 不会公开显示
    • 可能是。我的名声不是很高。感谢您的尝试。
    猜你喜欢
    • 2022-11-18
    • 2015-09-28
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多