将“Emgu.CV.Mat”分配给`Emgu.CV.UI.ImageBox`(Emgu)时出现’System.AccessViolationException’
您正在尝试将Emgu.CV.Mat
分配给Emgu.CV.Mat
,但我在CvInvokeCore.cs
文件中遇到System.AccessViolationException
错误(第2379行cveMinMaxLoc(iaArr, ref minVal, ref maxVal, ref minLoc, ref maxLoc, iaMask);
):
Emgu.CV.World.dll中出现未处理的“System.AccessViolationException”类型exception
附加信息:尝试读取或写入受保护的内存。 这通常表明其他内存已损坏。
守则非常简单。 我生成一个位图
Bitmap tmp = mybitmap.getBitmap(); // generates my Bitmap pictureBox1.Image = tmp; // assigning it to an Win Form picture Box works pretty fine imageBox1.Image = ConvertBitmapToMat(tmp); // but converting the Bitmap to an Mat file // and try to assign it to an // Emgu.CV.UI.ImageBox throws the // error in the above mentioned file.
我使用的ConvertBitmapToMat()
代码是:
public Mat ConvertBitmapToMat(Bitmap bmp) { // Lock the bitmap's bits. Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat); // data = scan0 is a pointer to our memory block. IntPtr data = bmpData.Scan0; // step = stride = amount of bytes for a single line of the image int step = bmpData.Stride; // So you can try to get you Mat instance like this: Mat mat = new Mat(bmp.Height, bmp.Width, Emgu.CV.CvEnum.DepthType.Cv32F, 4, data, step); // Unlock the bits. bmp.UnlockBits(bmpData); return mat; }
发现于http://avidprogrammer.blogspot.de/2016/05/emgucv-c-convert-bitmap-object-to-mat.html
有什么建议吗?
使用图像<>
Bitmap tmp = mybitmap.getBitmap(); Image img = new Image(tmp); imageBox1.Image = img;
如果你需要Mat类型,只需使用img.Mat