将 Mat 转换为 byte[] - .net core

Convert Mat to byte[] - .net core

我正在尝试将 EmgCV 与 .netCore 一起使用,我想 post 我的图像到服务器。

如何将我的图像(Mat 或 Image)转换为 byte[]。 我不能先将它转换为位图,因为我使用的是 .netcore 而不是框架。这就是我将 byte[] 转换为 Mat:

的方式
 byte[] bytes = await response.Content.ReadAsByteArrayAsync();
 Mat image2 = new Mat(4000, 6000, DepthType.Cv8U, 3);
 CvInvoke.Imdecode(bytes, ImreadModes.AnyColor, image2);

有人可以帮我反过来做吗?我试过使用它,但这不起作用:

 Image<Bgr, byte> afterImage = diff.ToImage<Bgr, byte>();
 byte[] afterbytes = afterImage.Bytes;

提前致谢!

我认为您收到的字节不是原始位图字节。相反,您会收到一个 jpeg 或 png 编码的图像。这就是为什么你必须使用 Imdecode。

EmguCV 还提供方法 Imencode 将图像编码成各种格式。

下面的示例将 image2 Mat 编码为 jpeg 字节。当 EmguCV 支持时,也可以是 png 或其他格式。

    var buffer = new VectorOfByte();
    CvInvoke.Imencode(".jpg", image2, buffer);  //Must use .jpg not jpg
    byte[] jpgBytes = buffer.ToArray();

除了 Mat,您还可以传递 Image

我自己找到了解决办法:

Image<Bgr, byte> afterImage = afterImageMat.ToImage<Bgr, byte>();

byte[] afterbytes = afterImage.ToJpegData();