Преобразовать Mat в байт [] -. net core - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь использовать EmgCV с .netCore, и я хочу опубликовать свое изображение на сервере.

Как я могу преобразовать свое изображение (мат или изображение ) в байт []. Я не могу сначала преобразовать его в Bitmap, так как я использую .netcore, а не framework. Вот так я конвертирую свой байт [] в мат:

 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;

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Сам нашел решение:

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

byte[] afterbytes = afterImage.ToJpegData();
0 голосов
/ 10 июля 2020

Я думаю, что байты, которые вы получаете, не являются необработанными байтами растрового изображения. Вместо этого вы получаете изображение в кодировке jpeg или png. Вот почему вы должны использовать Imdecode.

EmguCV также предлагает метод Imencode для кодирования изображений в различные форматы.

Пример ниже кодирует image2 Mat как байты jpeg. Также может быть png или что-то еще, если поддерживается EmguCV.

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

Вместо Mat вы также можете передать Image

...