1. YCbCr的含义
Y:表示明亮度,也就是灰阶值。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。
Cb:反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。
Cr:反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。
2. YCbCr与RGB的相互转换
Y = 0.257*R+0.504*G+0.098*B+16
Cb = -0.148*R-0.291*G+0.439*B+128
Cr = 0.439*R-0.368*G-0.071*B+128
R = 1.164*(Y-16)+1.596*(Cr-128)
G = 1.164*(Y-16)-0.392*(Cb-128)-0.813*(Cr-128)
B = 1.164*(Y-16)+2.017*(Cb-128)
3. YCbCr与RGB的相互转换代码实现
void RGBToYCbCr(int iR, int iG, int iB, int &oY, int &oCb, int &oCr)
{
oY = int(0.257*iR + 0.564*iG + 0.098*iB + 16);
oCb = int(-0.148*iR - 0.291*iG + 0.439*iB + 128);
oCr = int(0.439*iR - 0.368*iG - 0.071*iB + 128);
}
void YCbCrToRGB(int iY, int iCb, int iCr, int &oR, int &oG, int &oB)
{
oR = int(1.164*(iY - 16) + 1.596*(iCr - 128));
oG = int(1.164*(iY - 16) - 0.392*(iCb - 128) - 0.813*(iCr - 128));
oB = int(1.164*(iY - 16) + 2.017*(iCb - 128));
}