111,093
社区成员




public 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<Bgr, byte> cvImage = new Image<Bgr, byte>(bmp.Width, bmp.Height, stride, (IntPtr)bmpData.Scan0);
bmp.UnlockBits(bmpData);
return cvImage.Mat;
}
Image<Bgr, byte> cvImage = new Image<Bgr, byte>(bmp.Width, bmp.Height, stride, (IntPtr)bmpData.Scan0);
Image<Bgra, byte> cvImage = new Image<Bgra, byte>(bmp.Width, bmp.Height, stride, (IntPtr)bmpData.Scan0);
public Image<Bgr, byte> GetImageFromBitmap(Bitmap bitmap)
{
BitmapData data = bitmap.LockBits(
new Rectangle(Point.Empty, bitmap.Size),
ImageLockMode.ReadOnly,
bitmap.PixelFormat);
Image<Bgr, Byte> mat = new Image<Bgra, Byte>(bitmap.Width, bitmap.Height, data.Stride, data.Scan0).Convert<Bgr, byte>();
CvInvoke.MixChannels(mat, mat, new[] { 0, 0, 1, 1, 2, 2 });
/*
for (int i = 0; i < 3; i++)
{
CvInvoke.cvSetImageCOI(Ptr, i + 1);
CvInvoke.cvSetImageCOI(mat, i + 1);
CvInvoke.cvCopy(mat, Ptr, IntPtr.Zero);
}
CvInvoke.cvSetImageCOI(Ptr, 0);*/
bitmap.UnlockBits(data);
return mat;
}
这个是从emgucv旧版本中拔过来的方法。