yuv420p 详解_YUV格式介绍
何为YUV
RGB相信大家都明白是什么,也知道怎么用RGB来表示一个颜色。YUV也可以用来表示颜色,可以从RGB中得到,为得是使得亮度跟颜色分开,这样可以兼容黑白电视(只需显示Y的程度)。现代采像一般是把采集的图像信号经分色、分别放大后得到RGB,再经过矩阵转换电路取得亮度信号Y和两个色差信号R-Y(U)、B-Y(V),最后发送端将亮度和发送端三个信号分别进行编码,用同一信道发出去。YUV也是分别需要1个字节来表示Y、U、V,但是可以方便减少采样而使得画质不会太大受损,这样可以大大的减少存储空间。
YUV中的Y
Y表示明亮度(Luminance或者luma),也叫做灰阶值,用来表示黑白的程度。这个值是透过RGB的信号来建立的,方法是将RGB的特定信号叠加在一起,转换公式稍后会说。
YUV中的UV
UV代表色度值(chrominance/chroma),是构成彩色的两个分量。用于描述图片的色彩和饱和度,用于指定像素的颜色。U值也叫做Cr值,反映了RGB输入值的红色部分与RGB信号亮度值之间的差异。V值也叫做Cb值,反映了RGB输入值的蓝色部分与RGB信号亮度之间的差异。
饱和度
饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。纯的颜色都是高度饱和的,如鲜红,鲜绿。混杂上白色,灰色或其他色调的颜色,是不饱和的颜色,如绛紫,粉红,黄褐等。完全不饱和的颜色根本没有色调,如黑白之间的各种灰色
HSB
H(色相):光的波长
S(饱和度):颜色的纯度,比如红色,255,0,0为最纯。如果饱和度设置为50%,那么就变成255,128,128。
B(亮度):物体表面的反光率。比如:亮红是 255,0,0。如果亮度设置为50%,那么就变成 128,0,0.
YUV采样
4:4:4 采样
YUV三个信道抽样率相同,因此在生成的图像里,每个像素三个分量信息完整,经过8比特量化后,未经压缩占用3字节。例如:
四个像素为:[Y0 U0 V0][Y1 U1 V1][Y1 U1 V1][Y1 U1 V1]
存放的码流为:
Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映射的像素点为:[Y0 U0 V0][Y1 U1 V1][Y2 U2 V2][Y3 U3 V3]
4:2:2采样
并不意味着只有Y、Cb而没有Cr分量。它指的是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储,它指的是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0和话,下一行就是4:0:2,再下一行是4:2:0….,以此类推。例如:
八个像素为:[Y0 U0 V0][Y1 U1 V1][Y2 U2 V2][Y3 U3 V3][Y5 U5 V5][Y6 U6 V6][Y7 U7 V7][Y8 U8 V8]
存储的码流为(YUVY,packed格式):
Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8
映射出的像素点为:[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的存储格式
通常有两大类:打包格式(packed)和平面格式(planar),前者将YUV分量存放在同个数组中,通常是几个相邻的像素组成一个宏像素;后者使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。
YUV422 Plannar
YUV422 Semi-Planar(半平面格式)
NV12(UV)和NV21(VU)属于YUV420格式,是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane
YUV422 interleaved (packed模式)
4、YUV420 Plannar(YV12,YU12)
问答:
YUV 420数据为什么能省下内存
表示4组Y对应1组UV。
以 720x480的YUV图像为例子,解释一下数据存储格式。
720x480如果是RGB格式存储,R、G、B分别对应一个字节。所以需要 720*480*3个字节。
如果是yuv 420存储格式 4组y共用一组uv(共用的U是第一行第一个像素的U,V是第二行第二个像素的V)。 y占用一个字节,u占用一个字节,v占用一个字节。
下面这个图经常误导人。下面这个图并不是像素的排列方式。注意不是像素的排列方式。一个像素是会同时显示Y以及UV的。下面这个图只是为了说明四个Y对应一个UV。说明亮度、色度的采样模式。四个像素共用的U是第一行第一个像素的U,V是第二行第二个像素的V。
无论怎样yuv的格式如何,一个像素依然是要由一个Y(一个字节),U(一个字节)、V(一个字节来显示)来表示。 420的格式是说 隔壁的四个像素分别有4个y,然后要用的U跟V是同一样的数据。 这样4个像素占用的内存就由以前的 4*3 (RGB)个字节变为。4个Y字节+1个UV字节就能表示。平均下来就是一个像素占用 8(一个Y一个字节)+ 16(U+V)/4 = 12位。
所以420能比RGB剩下很多存储空间。
YUV 420的存储格式
YUV的存储格式分为打包(packed)格式和平面(planar)格式
YUV420P是平面格式,分为I420和YV12。他们之间有什么不同?
I420格式(YUV的标准格式)和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。
I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12跟NV21有什么区别
NV12根NV21都是420的半平面格式,他们的区别只是在于U和V的存储顺序不一致
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP
yuv420p 详解_YUV格式介绍相关推荐
- ubuntu 文件权限命令详解使用格式和方法
为什么80%的码农都做不了架构师?>>> 在 Ubuntu Linux 中用源码文件安装软件时经常都会用到chmod命令来更改文件的权限使其在安装时有执行的权限.由于 Ubun ...
- 备份数据库的expdp语句_Oracle数据库备份恢复Data Pump Expdp/Impdp参数详解与案例介绍...
oracle数据库备份恢复Data Pump Expdp/Impdp参数详解与案例介绍 目 录 1 Oracle数据泵的介绍 3 2 Oracle expdp/impdp参数使用介绍 3 2.1 Or ...
- c++ memset 语言_C/C++ 中memset() 函数详解及其作用介绍
memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的: 包含在头文件中,可以用它对一片内存空间逐字节进行初始化: 原型为 : void *memset(void *s, int v, si ...
- HDMI ARC功能详解及应用介绍
HDMI ARC功能详解及应用介绍 HDMI ARC,专注于音频传输的方案 ARC的全称为Audio Return Channel,顾名思义也就是音频回传通道.ARC出现的目的,是使整个数字化家电在线 ...
- Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例
Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...
- python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景
装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...
- chmod命令详解使用格式和方法
Linux系统中文件调用的权限分为三级:文件拥有者(u).群组(g).其他(o).用chmod就可以更改文件的权限.chmod是一个相当灵活的命令,对同一个文件的权限的修改可以用多种风格的命令格式来实 ...
- Python装饰器详解,详细介绍它的应用场景
装饰器的应用场景 附加功能 数据的清理或添加: 函数参数类型验证 @require_ints 类似请求前拦截 数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改 为函数提供额外的数据 ...
- Bert代码详解及模型介绍
前言 写在前边:很多东西我也仅仅是一知半解,仅仅记录学习过程,个人观点,还需要看大量的代码.必须要耐住性子看代码,别无他法,看的多了自然就会了. 因为个人不用tensorflow,so这是bert的p ...
- Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解
http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigatio ...
最新文章
- spring cloud微服务治理eureka、hystrix、zuul代码例子
- php判断是否已关注,php判断用户是否关注微信订阅号或公众号
- ae 创建图像等高线 蒙版_Pixelmator ——图像处理软件
- BlockingQueue阻塞队列
- 这个数学问题,打一局台球就解决了
- ios 从assets加载图片_iOS 使用Assets.xcassets添加启动图和Icon
- 互联网时代 手机商务应用为王
- 微波网络归一化转移矩阵[a]导出散射矩阵[S]
- Js获取处理日期时间
- VPC中安装Windows Server 2008
- Linux如何增大、缩小swap分区
- Bayesian framework 贝叶斯框架 (R)
- python海龟绘图颜色_Python:海龟绘图(六)——来点颜色看看
- 如何使用百数扫码实现高效信息录入与查询
- 【网络与系统安全实验】网络扫描与防御技术
- iframe不能显示内容的问题
- Pr 从入门到精通(合集)
- 一周内“克隆”了 Twitter,没用一行代码
- JavaScript replace()方法限制文本框输入文本类型(数字/字母等)的正则表达式
- 粗读SELF-SUPERVISED LEARNING IS MORE ROBUST TO DATASET IMBALANCE
热门文章
- 个人考研资料整理(更新一战后感想)
- 《Java程序设计》期末复习资料
- jsp linux 一键安装包,JspStudy免费版|JspStudy(jsp环境一键安装包) v2016.01.01免费版_星星软件园...
- arduino pro mini 迷你 ATmega328P 程序下载 usb-ttl reset
- heic图片格式转换jpg_如何在Mac上通过简单方法将HEIC图像转换为JPG
- STM32入门——什么是STM32
- 免费好用的英语词频统计软件(下载地址在文末)
- HCNA认证课程—VRP基础操作总结
- 视频教程-PHP开发进阶课程docker入门与进阶-PHP
- 解决 IDEA 导入项目 中文乱码