将 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();
我正在尝试将 EmgCV 与 .netCore 一起使用,我想 post 我的图像到服务器。
如何将我的图像(Mat 或 Image
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();