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

本文关键字:字节 数组 字节数 转换 RGB NV12 YUV4 | 更新日期: 2023-09-27 18:21:54

我有一个从网络摄像头(使用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;

}

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

这最好在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