YUV色彩空间

YUV为一种图像编码格式

  • Y分量表示图像的亮度信息,即灰度分量。它描述了像素的明亮程度,取值范围通常在0到1之间,其中0表示黑色,1表示白色。
  • U分量表示蓝色色差信息,描述了像素与亮度信息的差异,即图像中蓝色和黄色的分量。取值范围通常在-0.5到0.5之间。
  • V分量表示红色色差信息,同样描述了像素与亮度信息的差异,即图像中红色和绿色的分量。取值范围同样在-0.5到0.5之间。
  • 总的来说,Y 表示明亮度(Luminance、Luma),而 U 和 V 表示色度(Chrominance、Chroma)。
  • 研究发现,人眼对亮度的敏感度要对色度的敏感度要高,因此减少UV的存储可能对图像质量并不会有太大影响,因此YUV经常用于视频压缩等
  • 按理说,每个像素都应有自己的YUV分量,但是采样和存储YUV图像的过程中可能并不会处理所有的UV

YUV与RGB转换公式:

在这里插入图片描述
在这里插入图片描述

YUV图像采样方式

YUV4:4:4采样
  • YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bit,也就是一个字节。
  • 举个例子 :
    假如图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
    那么采样的码流为:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
    最后映射出的像素点依旧为 [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
  • 这种采样方式的图像和 RGB 颜色模型的图像大小是一样,并没有达到节省带宽的目的,当将 RGB 图像转换为 YUV 图像时,也是先转换为 YUV 4:4:4 采样的图像。
YUV4:2:2采样
  • YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2 : 1 的比例采样。如果水平方向有 10 个像素点,那么采样了 10 个 Y 分量,而只采样了 5 个 UV 分量。
  • 举个例子 :
    假如图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
    那么采样的码流为:Y0 U0 Y1 V1 Y2 U2 Y3 V3
    其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。
    最后映射出的像素点为 [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]
YUV4:2:0采样
  • YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2 : 1 的方式采样。比如,第一行扫描时,YU 按照 2 : 1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。
  • 举个例子 :
    假设图像像素为:
    [Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3]
    [Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
    那么采样的码流为:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8
    其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。
    最后映射出的像素点为:
    [Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
    [Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]

YUV存储格式

分两种:
planar 平面格式
指先连续存储所有像素点的 Y 分量,然后存储 U 分量,最后是 V 分量。
packed 打包模式
指每个像素点的 Y、U、V 分量是连续交替存储的。

planar平面格式
  • I420为例(与I422类似,只是UV数量不同)Y/U/V排列如下:
  • 在这里插入图片描述
  • Semi-Planar排列如下:
  • 在这里插入图片描述
packed平面格式
  • YUYV 格式:
  • 在这里插入图片描述
  • UYVY格式:
  • 在这里插入图片描述

cv2转变RGB图像为YUV图像

  • img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
  • 如上文所说,当将 RGB 图像转换为 YUV 图像时,也是先转换为 YUV 4:4:4 采样的图像。因此img_yuv[:,:,0],img_yuv[:,:,1],img_yuv[:,:,2]分别为YUV通道的信息

利用YUV对RGB彩色图像均衡化处理

def equalizeHist(img):
    img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
    # 0为Y通道,1为U通道,2为V通道,即对亮度通道进行均衡化处理
    img_yuv[:, :, 0] = cv2.equalizeHist(img_yuv[:, :, 0])
    img_output = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2BGR)
    return img_output

参考:https://blog.csdn.net/xkuzhang/article/details/115423061
https://zhuanlan.zhihu.com/p/113122344

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值