Visual Studio C#将位图转换为Emgu Mat总是失败

50few1ms  于 2023-11-21  发布在  C#
关注(0)|答案(2)|浏览(212)

我试图将位图转换为用于OpenCV的MAT。但由于某种原因,他们不让我转换它。我在Stack上找到了下面的代码,并在许多其他网站上看到了它。
有人知道为什么它不工作吗?

  • 无法将“系统.绘图.位图”转换为“字节[,,]"。*

作为一个说明,在开始时,8个屏幕截图被设置为坐标,这些被保存为位图,然后应该被转换为垫。
请看嵌入的图像。

  1. public static Image<Bgr, byte> FromFile = new Image<Bgr, byte>("MyImage.jpg");
  2. Mat mat = FromFile.Mat; // Only a way to convert it succesfull,
  3. // but isnt the way i want to go.
  4. public static Bitmap skillQ;
  5. public static Image<Bgr, byte> FromBitmap = new Image<Bgr, byte>(skillQ).ToImage;
  6. Mat mat2 = FromBitmap.Mat;
  7. //public static Image<Bgr, byte> FromBitmap = new Image<Bgr, byte>(skillQ).ToImage;

字符串
此图像显示错误消息。


的数据

gzszwxb4

gzszwxb41#

首先,您不是将图像转换为Mat,而是转换为Image<>(有关差异以及here是什么的更多信息)。
要将任何图像从文件转换为Mat,您只需使用以下命令:

  1. Mat fromFile = new Mat("test.bmp");

字符串
要将Bitmap转换为Mat,您可以安装NuGet Emgu.CV.Bitmap,它添加了一些扩展以促进转换为Bitmap

  1. Bitmap bitmapTest = fromFile.ToBitmap();
  2. Mat fromBitmap = bitmapTest.ToMat();

qcuzuvrc

qcuzuvrc2#

你可以简单地用这个方法为你转换它,这个方法对我来说非常有效。
方法:

  1. static void BitmapToMat(Bitmap bitmap, Mat mat)
  2. {
  3. BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
  4. CvInvoke.CvtColor(new Mat(bmpData.Height, bmpData.Width, DepthType.Cv8U, 3, bmpData.Scan0, bmpData.Stride), mat, ColorConversion.Bgr2Bgra);
  5. bitmap.UnlockBits(bmpData);
  6. }

字符串

相关问题