C# 实现 bitmap 和 mat 的格式相互转换

Igor OpenCV评论7,372字数 922阅读3分4秒阅读模式

库函数实现的函数:

// (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);
}

文章末尾固定信息

weinxin
我的微信
我的微信
一个码农、工程狮、集能量和智慧于一身的、DIY高手、小伙伴er很多的、80后奶爸。
 
Igor
  • 本文由 Igor 发表于 2023-01-1510:46:05
opencv和pillow对图片的读写耗时对比 OpenCV

opencv和pillow对图片的读写耗时对比

?生成数组 不同的包对于读写图片有不同的优化方式,导致他们的读写时间有差异,这个差异一般情况下可能无所谓,但是在大量图片数据的读写时,却可以节约大量的时间。 生成二维数组: import cv2 im...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证