库函数实现的函数:
// (1) 转为 bitmap: Bitmap map = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat); process_pictureBox.Image = map; // (2) Image img 转为Mat: Bitmap bitmap = new Bitmap(img);//Image img OpenCvSharp.Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat
该方法内存泄露比较严重,噌噌往上涨,下面的方法要好一些。
个人封装的函数:
// (1)转为 bitmap:
public static Bitmap MatToBitmap(Mat dst)
{
return new Bitmap(dst.Cols, dst.Rows, (int)dst.Step(), PixelFormat.Format24bppRgb, dst.Data);
}
// (2)Image img 转为Mat
public static Mat BitmapToMat(Bitmap srcbit)
{
int iwidth = srcbit.Width;
int iheight = srcbit.Height;
int iByte = iwidth * iheight * 3;
byte[] result = new byte[iByte];
int step;
Rectangle rect = new Rectangle(0, 0, iwidth, iheight);
BitmapData bmpData = srcbit.LockBits(rect, ImageLockMode.ReadWrite, srcbit.PixelFormat);
IntPtr iPtr = bmpData.Scan0;
Marshal.Copy(iPtr, result , 0, iByte);
step = bmpData.Stride;
srcbit.UnlockBits(bmpData);
return new Mat(srcbit.Height, srcbit.Width, new MatType(MatType.CV_8UC3), result ,step);
}文章末尾固定信息

我的微信
我的微信
一个码农、工程狮、集能量和智慧于一身的、DIY高手、小伙伴er很多的、80后奶爸。



服务器0元试用,首购低至0.9元/月起




评论