将NV12(YUV4:2:0)字节数组转换为RGB字节数组

时间:2013-07-11 11:04:47

标签: c# colors yuv

我有一个从网络摄像头捕获的字节流(使用Aforge.Net库)。但捕获的图像以NV12或YUV

返回

我需要将其转换为RGB字节流。为了实现这种转换,我需要知道如何读取/解释字节数组。

我希望实现一个执行此操作的函数

byte[] ConvertToRGB(byte[] YCbCrarray)
{

//Read the byte array and encode it in RGB format and return it as a byte array

    return rgbarray;


}

1 个答案:

答案 0 :(得分:1)

这最好用C ++完成 - 你可以使用Microsoft的DirectXTex库(如果你想要测试代码)。

您也可以使用以下公式自行转换:

CLIP(X) ( (X) > 255 ? 255 : (X) < 0 ? 0 : X)
// YCbCr -> RGB
CYCbCr2R(Y, Cb, Cr) CLIP( Y + ( 91881 * Cr >> 16 ) - 179 )
CYCbCr2G(Y, Cb, Cr) CLIP( Y - (( 22544 * Cb + 46793 * Cr ) >> 16) + 135)
CYCbCr2B(Y, Cb, Cr) CLIP( Y + (116129 * Cb >> 16 ) - 226 )

请注意,您需要图像的尺寸,而不仅仅是字节大小。 NV12中的Y通道位于第一个(每个像素1个字节),然后是UV(每4个像素2个字节),如下所述:http://www.fourcc.org/yuv.php#NV12