Я хочу преобразовать поток YUV в байты RGB, чтобы они могли отображаться через изображение WPF.
Все значения YUV помещаются в соответствующие массивы на кадр y , u , v .ширина и высота цветности - половина соответствующих размеров яркости.
byte[] y = (byte[])yData;
byte[] u = (byte[])uData;
byte[] v = (byte[])vData;
var ym = new Mat(new[] { lumaHeight, lumaWidth }, MatType.CV_8UC1, y, new long[] { lumaStride });
var um = new Mat(new[] { chromaWidth, chromaHeight }, MatType.CV_8UC1, u, new long[] { chromaStride});
var vm = new Mat(new[] { chromaWidth, chromaHeight }, MatType.CV_8UC1, v, new long[] { chromaStride});
Я использую следующий код для передачи данных в openCV:
var combinedSource = new[] { ym, um, vm };
var m = new Mat();
var src = InputArray.Create(combinedSource);
var @out = OutputArray.Create(m);
Cv2.CvtColor(src, @out, ColorConversionCodes.YUV2BGR);
ImageData = @out.GetMat().ToBytes();
Но я получаю ошибку : {"!_src.empty()"}
Массивы yuv определенно не пусты.
Я пытаюсь использовать другой метод, используя:
var combinedOut = new Mat(new[] { lumaHeight, lumaWidth }, MatType.CV_8UC3);
Cv2.Merge(combinedSource, combinedOut);
var bgra = combinedOut.CvtColor(ColorConversionCodes.YUV2BGR);
ImageData = bgra.ToBytes();
Но получаю ошибку {"mv[i].size == mv[0].size && mv[i].depth() == depth"}
Почему я получаю эти ошибки и как правильно конвертировать?