System.Drawing.Image 至 Emgu.CV.Mat
System.Drawing.Image to Emgu.CV.Mat
如题。我在将 System.Drawing.Image 转换为 Emgu.CV.Mat 时遇到问题
我试图将它从 Drawing.Image 隐藏到 CV.Image 但仍然有例外。
还有其他解决方案吗?任何帮助渲染都非常感谢。
OpenCV 或 EmguCV 图像中有一个 Mat header。我发现的技巧是将 System.Drawing.Image 放入 Image<> 中。如果您在使用 EmguCV 3.1 时遇到异常问题,请确保针对 x64 进行编译。
这里有一个简单的获取垫子的方法object:
private 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<Bgra, byte> cvImage = new Image<Bgra, byte>(bmp.Width, bmp.Height, stride, (IntPtr)bmpData.Scan0);
bmp.UnlockBits(bmpData);
return cvImage.Mat;
}
希望对您有所帮助!
道格
如题。我在将 System.Drawing.Image 转换为 Emgu.CV.Mat 时遇到问题 我试图将它从 Drawing.Image 隐藏到 CV.Image 但仍然有例外。
还有其他解决方案吗?任何帮助渲染都非常感谢。
OpenCV 或 EmguCV 图像中有一个 Mat header。我发现的技巧是将 System.Drawing.Image 放入 Image<> 中。如果您在使用 EmguCV 3.1 时遇到异常问题,请确保针对 x64 进行编译。
这里有一个简单的获取垫子的方法object:
private 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<Bgra, byte> cvImage = new Image<Bgra, byte>(bmp.Width, bmp.Height, stride, (IntPtr)bmpData.Scan0);
bmp.UnlockBits(bmpData);
return cvImage.Mat;
}
希望对您有所帮助! 道格