为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 【金秋打卡】第24天 YUV的常见数据采集格式和存储格式

【金秋打卡】第24天 YUV的常见数据采集格式和存储格式

2022.11.16 19:16 590浏览

课程名称音视频基础+ffmpeg原理 入门音视频技术开发
课程章节:视频基础知识
课程讲师李超

课程内容

1.什么是 YUV

YUV(也称 YCbCr),是一种颜色编码,其中Y表示明亮度,U和V表示的则是色度,作用是描述影像色彩及饱和度。

“色度”定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽。YUV 的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。

RGB 与 YUV 的关系

RGB 通常用于屏幕图像的展示,YUV 用于视频的采集和编码。

RGB 转 YUV

    Y = 0.299*R + 0.587*G + 0.114*B
    U = -0.147*R - 0.289*G +0.436*B = 0.492*(B-Y)
    V = 0.615*R - 0.515*G - 0.100*B = 0.877*(R-Y)

YUV 转 RGB

    R = Y + 1.140*V
    G = Y - 0.394*U - 0.581*V
    B = Y + 2.032*U

2.YUV 的常见采集格式

YUV 的常见采样方式有三种:YUV4:4:4、YUV4:2:2、YUV4:2:0,其中YUV4:2:0 是最常用的格式。

4:2:0并不意味着只有 Y、Cb 两个分量,而没有 Cr 分量。它实际指的是对每行扫描线来说,只有一种色度分量,它以 2:1 的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是 4:2:0的话,下一行就是4:0:2,再下一行是4:2:0……以此类推。

  • 4:4:4,表示完全取样。
  • 4:2:2,表示2:1的水平取样,垂直完全采样。
  • 4:2:0,表示2:1的水平取样,垂直2:1采样。

可以这样理解:

  • 4:4:4,每一个Y对应一组UV分量,一个YUV占8+8+8 = 24bits 3个字节。
  • 4:2:2,每两个Y共用一组UV分量,一个YUV占8+4+4 = 16bits 2个字节。
  • 4:2:0,每四个Y共用一组UV分量,一个YUV占8+2+2 = 12bits 1.5个字节。

3.YUV 的存储格式

YUV 的存储格式有两种:planar模式和 packed模式。

planar 模式

对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。

  • I420(又称 YU12),首先存储所有Y值,然后是所有U值,最后是所有V值。
  • YV12 iOS手机从摄像头采集的预览数据一般都是YV12。首先是所有Y值,然后是所有V值,最后是所有U值。
I420: YYYYYYYY UU VV => YUV420P
YV12: YYYYYYYY VV UU => YUV420P

packed 模式

对于packed的YUV格式,每个像素点的Y、U、V都是连续交叉存储的。

  • NV12,android手机从摄像头采集的预览数据一般都是NV21,存储顺序是先存Y,再VU交替存储。
  • NV21,NV21存储顺序是先存Y值,再VU交替存储。
NV12: YYYYYYYY UVUV => YUV420SP
NV21: YYYYYYYY VUVU => YUV420SP

图片描述
图片描述

点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
7
获赞与收藏
12

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

51篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

151篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消