【问题标题】:Convert Mat to byte[] - .net core将 Mat 转换为 byte[] - .net 核心
【发布时间】:2020-10-31 04:42:13
【问题描述】:

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

如何将我的图像(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;

提前致谢!

【问题讨论】:

    标签: arrays .net-core emgucv


    【解决方案1】:

    我认为您收到的字节不是原始位图字节。相反,您会收到 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();
    

    你也可以通过 Image

    来代替 Mat

    【讨论】:

      【解决方案2】:

      我自己找到了解决办法:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-09
        • 2018-01-11
        • 2020-09-30
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        • 2020-09-01
        • 2011-06-08
        相关资源
        最近更新 更多