RGB YUV

前几天碰到一个问题,需要做一张全黑的raw data给encode压码测试,因为raw data的格式是YUV的,于是相当然的就把所有值全置为0,因为Y值(亮度)置为0了,所以以为圧码出来的frame就应该是黑色的,可压完才发现是粉色的,这下晕了,因为全黑对于RGB就意味着全0, 于是赶紧找找RGB跟YUV格式转换的算法。

 

这 是YUV转RGB的

R= 1.0Y + 0 +1.402(V-128)  
G= 1.0Y - 0.34413 (U-128)-0.71414(V-128)  
B= 1.0Y + 1.772 (U-128)+0

看完这一下就清楚了,YUV为全0时,RGB并不为全0,要想压全黑的,必须是:

Y = 0;

U = V = 128;

 

于是重新做了一份raw data, 压完一看,果然全黑了。

 

附RGB转YUV如下:

Y = 0.257R′ + 0.504G′ + 0.098B′ + 16
Cb = -0.148R′ - 0.291G′ + 0.439B′ + 128
Cr = 0.439R′ - 0.368G′ - 0.071B′ + 128

### RGBYUV之间的转换或关系 在图像处理领域,RGBYUV 是两种不同的颜色空间表示方法。RGB 颜色模型基于红 (Red)、绿 (Green) 和蓝 (Blue) 三种基本颜色的组合来定义色彩,而 YUV 则是一种亮度/色度分离的颜色模型,其中 Y 表示亮度分量,U 和 V 表示色度分量。 #### 转换公式 从 RGBYUV 的转换可以通过线性变换实现。具体的转换公式如下: 对于标准 ITU-R BT.601 定义的转换矩阵[^1]: ```python Y = 0.299 * R + 0.587 * G + 0.114 * B U = -0.147 * R - 0.289 * G + 0.436 * B V = 0.615 * R - 0.515 * G - 0.100 * B ``` 逆向转换(即从 YUV 返回到 RGB)可以使用以下公式: ```python R = Y + 1.14 * V G = Y - 0.395 * U - 0.581 * V B = Y + 2.032 * U ``` 这些公式的推导依赖于特定的标准和应用场景,在实际应用中可能会有所调整以适应不同设备的需求。 #### 应用场景 YUV 颜色空间的一个重要特性是其能够有效地压缩数据而不显著影响视觉质量。通过将亮度信息(Y)与色度信息(U,V)分开存储,可以在保持较高分辨率的同时降低色度部分的数据率。这种技术广泛应用于视频编码和传输过程中,例如 MPEG 或 H.264 编码标准中的帧间预测和量化过程[^2]。 此外,在某些特殊情况下,通过对参数 ρ 进行调节还可以增强对红色、黄色或其他色调区域的识别能力,从而辅助后续二值化及分割操作[^3]。 ### 示例代码 以下是 Python 中实现 RGBYUV 转换的一段简单代码片段: ```python def rgb_to_yuv(r, g, b): y = 0.299 * r + 0.587 * g + 0.114 * b u = -0.147 * r - 0.289 * g + 0.436 * b v = 0.615 * r - 0.515 * g - 0.100 * b return y, u, v ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值