我有一个从网络摄像头捕获的字节流(使用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;
}
答案 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