【发布时间】:2013-05-06 21:54:34
【问题描述】:
有没有办法使用 C# 在 EmguCV 上将 System.Drawing.Image 类型的图像转换为 Emgu.CV.Image 类型的图像,反之亦然?如果需要额外解释这样做的目的,我会根据您的要求进行解释。
【问题讨论】:
标签: c# image emgucv typeconverter
有没有办法使用 C# 在 EmguCV 上将 System.Drawing.Image 类型的图像转换为 Emgu.CV.Image 类型的图像,反之亦然?如果需要额外解释这样做的目的,我会根据您的要求进行解释。
【问题讨论】:
标签: c# image emgucv typeconverter
// 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);
【讨论】:
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
【讨论】:
bmpdata.Stride? Width*4 或 Width*3 的计算可能会偏离一些像素,因为在内部,数据必须对齐到 8 的倍数左右。