24位BMP图像RGB与YUV转换

关于BMP图像格式的部分这里就不讲了,网上有很多资料可以查阅,详细可以看下面的代码。

在读取了BMP图像以后,开始把RGB转化为YUV(有关YUV可以查阅wiki)。

本次使用的YUV标准是8-bit BT.601 YUV,也就是YUV 4:4:4。


从RGB转化为YUV格式有很多种方法,我采用的是整型法,公式如下:

Y = ( (  66 * R + 129 * G +  25 * B + 128) >> 8) +  16
U = ( ( -38 * R -  74 * G + 112 * B + 128) >> 8) + 128
V = ( ( 112 * R -  94 * G -  18 * B + 128) >> 8) + 128


若设定C = Y - 16,D = U - 128,E = V - 128,则YUV转化为RGB的公式如下:

R = clip(( 298 * C + 409 * E + 128) >> 8)
G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8)
B = clip(( 298 * C + 516 * D + 128) >> 8)


其中clip是截断函数,因为我们必须把计算出来的结果控制在0~255范围内。截断函数可以简单的把超过255部分设为255,低于0的部分设为0,也可以用线性变换来截断。这里我就用简单的截断方法了。接下来放一下完整代码:

#include <cstdio>
#include <iostream>
#include <cstdlib>
#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值