【发布时间】:2019-11-12 22:46:15
【问题描述】:
我想将 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"}
为什么我会收到这些错误,正确的转换方法是什么?
【问题讨论】: