OpenCV RGB与YCbCr互换

本文详细解析了YCbCr与RGB色彩空间的基本概念及其相互转换原理,包括YCbCr中亮度(Y)、蓝色差(Cb)和红色差(Cr)的含义,并提供了具体的转换公式及代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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));
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪易

给我来点鼓励吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值