【问题标题】:Convert System.Drawing.Image to Emgu.CV.Image<Gray,byte>将 System.Drawing.Image 转换为 Emgu.CV.Image<Gray,byte>
【发布时间】:2013-05-06 21:54:34
【问题描述】:

有没有办法使用 C# 在 EmguCV 上将 System.Drawing.Image 类型的图像转换为 Emgu.CV.Image 类型的图像,反之亦然?如果需要额外解释这样做的目的,我会根据您的要求进行解释。

【问题讨论】:

    标签: c# image emgucv typeconverter


    【解决方案1】:
    // Converting the master image to a bitmap
    Bitmap masterImage = (Bitmap) pbxMaster.Image;
    
    // Normalizing it to grayscale
    Image<Gray, Byte> normalizedMasterImage = new Image<Gray, Byte>(masterImage);
    

    【讨论】:

      【解决方案2】:

      EmguCV 4.2.0.3636 [及更高版本] 使用以下代码:

      using System.Drawing;
      using System.Drawing.Imaging;
      using Emgu.CV;
      using Emgu.CV.Structure;
      
      //inputImage type is System.Drawing.Image
      Bitmap bitmapImage = new Bitmap(pictureBox1.Image);
      
      Rectangle rectangle = new Rectangle(0, 0, bitmapImage.Width, bitmapImage.Height);//System.Drawing
      BitmapData bmpData = bitmapImage.LockBits(rectangle, ImageLockMode.ReadWrite, bitmapImage.PixelFormat);//System.Drawing.Imaging
      
      Image<Bgr, byte> outputImage = new Image<Bgr, byte>(bitmapImage.Width, bitmapImage.Height, bmpData.Stride, bmpData.Scan0);//(IntPtr)
      //outputImage type is Emgu.CV.Image
      

      【讨论】:

      • 如果您也尝试显示图像,请记住检查位图锁定。 weblogs.asp.net/anasghanem/…
      • 为什么不使用bmpdata.Stride? Width*4 或 Width*3 的计算可能会偏离一些像素,因为在内部,数据必须对齐到 8 的倍数左右。
      • @Thomas Weller 编辑了我的答案以反映“跨步”的​​真实价值。谢谢。
      猜你喜欢
      • 2020-02-09
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      相关资源
      最近更新 更多