YUV444,YUV422P,YUVY,YUYV,UYVY,NV21,NV12
目录(?)[-]
- Name
- Description
V4L2_PIX_FMT_NV12 ('NV12'), V4L2_PIX_FMT_NV21 ('NV21')
Name
DescriptionThese are two-plane versions of the YUV 4:2:0 format. The three components are separated into two sub-images or planes. The Y plane is first. The Y plane has one byte per pixel. For If the Y plane has pad bytes after each row, then the CbCr plane has as many pad bytes after its rows. Example 2.23. Byte Order. Each cell is one byte.
Color Sample Location.
|
YUV格式有两大类:planar和packed。
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,关于其详细原理,可以通过网上其它文章了解,这里我想强调的是如何根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。
用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。
先记住下面这段话,以后提取每个像素的YUV分量会用到。
- YUV 4:4:4采样,每一个Y对应一组UV分量。
- YUV 4:2:2采样,每两个Y共用一组UV分量。
- YUV 4:2:0采样,每四个Y共用一组UV分量。
2. 存储方式
下面我用图的形式给出常见的YUV码流的存储方式,并在存储方式后面附有取样每个像素点的YUV数据的方法,其中,Cb、Cr的含义等同于U、V。
(1) YUVY 格式 (属于YUV422)
YU12和YV12属于YUV420格式,也是一种Plane模式,将Y、U、V分量分别打包,依次存储。其每一个像素点的YUV数据提取遵循YUV420格式的提取方式,即4个Y分量共用一组UV。注意,上图中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次类推。
(5)NV12、NV21(属于YUV420)
NV12和NV21属于YUV420格式,是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane。其提取方式与上一种类似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00
YUV420 planar数据, 以720×488大小图象YUV420 planar为例,
其存储格式是: 共大小为(720×480×3>>1)字节,
分为三个部分:Y,U和V
Y分量: (720×480)个字节
U(Cb)分量:(720×480>>2)个字节
V(Cr)分量:(720×480>>2)个字节
三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。
即YUV数据的0--720×480字节是Y分量值,
720×480--720×480×5/4字节是U分量
720×480×5/4 --720×480×3/2字节是V分量。
4 :2: 2 和4:2:0 转换:
最简单的方式:
YUV4:2:2 ---> YUV4:2:0 Y不变,将U和V信号值在行(垂直方向)在进行一次隔行抽样。 YUV4:2:0 ---> YUV4:2:2 Y不变,将U和V信号值的每一行分别拷贝一份形成连续两行数据。
在YUV420中,一个像素点对应一个Y,一个4X4的小方块对应一个U和V。对于所有YUV420图像,它们的Y值排列是完全相同的,因为只有Y的图像就是灰度图像。YUV420sp与YUV420p的数据格式它们的UV排列在原理上是完全不同的。420p它是先把U存放完后,再存放V,也就是说UV它们是连续的。而420sp它是UV、UV这样交替存放的。(见下图) 有了上面的理论,我就可以准确的计算出一个YUV420在内存中存放的大小。 width * hight =Y(总和) U = Y / 4 V = Y / 4
所以YUV420 数据在内存中的长度是 width * hight * 3 / 2,
假设一个分辨率为8X4的YUV图像,它们的格式如下图:
YUV420sp格式如下图
YUV420p数据格式如下图
旋转90度的算法:
public static void rotateYUV240SP(byte[] src,byte[] des,int width,int height)
{
int wh = width * height;
//旋转Y
int k = 0;
for(int i=0;i<width;i++) {
for(int j=0;j<height;j++)
{
des[k] = src[width*j + i];
k++;
}
}
for(int i=0;i<width;i+=2) {
for(int j=0;j<height/2;j++)
{
des[k] = src[wh+ width*j + i];
des[k+1]=src[wh + width*j + i+1];
k+=2;
}
}
}
YV12和I420的区别 一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3 Bit,RGB32的size=width×heigth×4,如果是I420(即YUV标准格式4:2:0)的数据量是 size=width×heigth×1.5 Bit。 在采集到RGB24数据后,需要对这个格式的数据进行第一次压缩。即将图像的颜色空间由RGB2YUV。因为,X264在进行编码的时候需要标准的YUV(4:2:0)。但是这里需要注意的是,虽然YV12也是(4:2:0),但是YV12和I420的却是不同的,在存储空间上面有些区别。如下: YV12 : 亮度(行×列) + U(行×列/4) + V(行×列/4)
I420 : 亮度(行×列) + V(行×列/4) + U(行×列/4)
可以看出,YV12和I420基本上是一样的,就是UV的顺序不同。
继续我们的话题,经过第一次数据压缩后RGB24->YUV(I420)。这样,数据量将减少一半,为什么呢?呵呵,这个就太基础了,我就不多写了。同样,如果是RGB24->YUV(YV12),也是减少一半。但是,虽然都是一半,如果是YV12的话效果就有很大损失。然后,经过X264编码后,数据量将大大减少。将编码后的数据打包,通过RTP实时传送。到达目的地后,将数据取出,进行解码。完成解码后,数据仍然是YUV格式的,所以,还需要一次转换,这样windows的驱动才可以处理,就是YUV2RGB24。
YUY2 是 4:2:2 [Y0 U0 Y1 V0]
YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。I420格式和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。
YUV420SP, Y分量平面格式,UV打包格式, 即NV12。 NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。
I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP
http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html
YUV444,YUV422P,YUVY,YUYV,UYVY,NV21,NV12相关推荐
- 【Android】直播必备之YUV使用总结 —— 常用的几种格式:NV21/NV12/YV12/YUV420P的区别
转载自 gitzzp 的博客 [Android]直播必备之YUV使用总结 -- 常用的几种格式:NV21/NV12/YV12/YUV420P的区别 转自:http://www.cnblogs.com/ ...
- android nv21 nv12,視頻存儲格式YUV420 NV12 NV21 i420 YV12
1)YUV簡介 YUV格式有兩大類:planar和packed. 對於planar的YUV格式,先連續存儲所有像素點的Y,緊接着存儲所有像素點的U,隨后是所有像素點的V. 對於packed的YUV格式 ...
- 基于虹软SDK在C/S 模式下的多人脸实时识别(C#)
一.前言 虹软开发SDK以来,其免费使用的营销策略,成功降低了中小企业使用人脸识别技术的成本.然而,对.NET开发者来说,虹软没有提供C#版本的SDK供开发者直接调用(为什么JAVA就有?!),而是建 ...
- yuv420格式nv12,nv21,I420,YV12互转
YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...
- yuv数据(nv12和nv21)和RGB数据之间转换的c++代码
一.首先了解下nv12和nv21的数据排布 nv21 Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y V U V U V U V U nv21 Y Y Y Y Y Y Y Y Y Y ...
- java yuv420sp转nv21_Android图片格式NV12(YUV420SP)转YUV420P
Android设备调用摄像头采集数据时,Camera对象通过setPreviewCallback (Camera.PreviewCallback callback)函数,在onPreviewFrame ...
- 摄像头YUV图像常见数据格式介绍
1.YUV模型分类: 是根据一个亮度(Y分量)和两个色度(UV分量)来定义颜色空间,常见的YUV格式描述有YUY2.YUYV.YVYU.UYVY.AYUV.Y41P.Y411.Y211.IF09.IY ...
- YUV颜色通道存储格式
YUV 常见的YUV格式描述有YUY2.YUYV.YVYU.UYVY.AYUV.Y41P.Y411.Y211.IF09.IYUV.YV12.YVU9.YUV422.YUV420等, 其中常见的YUV4 ...
- YUV422/YUV420
YUV三种数据格式占用空间计算: YUV444 ==> YUV444 1920*1080 ==> 1920*1080个Y+1920*1080个U+1920*1080个V = 1920*1 ...
最新文章
- 学计算机专业需要考的证有哪些科目,自考计算机专业的考试科目有哪些?
- ng2项目启动过程出现‘getSymbolByModule' of undefined‘错误
- nefu 628 Garden visiting
- 日常办公会用到的python模块-用 Python 自动化办公能做到哪些有趣或有用的事情?...
- C/C++常见库函数实现(memcpy、memset、 strcpy)
- POJ1456-Supermarket【并查集】
- 【leetcode】332. Reconstruct Itinerary
- VS2010大左括号置新行及代码批量格式化
- Win10设置系统保护色
- 布客·ApacheCN 编程/大数据/数据科学/人工智能学习资源 2020.2
- 【图像分割】基于直觉模糊C均值聚类实现图像分割IFCMmatlab代码
- 有哪些培训管理教务系统?染书CRMA,进销存管理明细清晰
- HTML背景颜色为什么改变不了,css背景颜色不显示怎么解决
- 网页打印计算机死机,调用网络打印就死机
- 谷歌Chrome浏览器就能远程控制安卓手机,电脑远程控制手机的快捷方法get!
- 服务器固态硬盘无法识别硬盘,固态硬盘无法识别的原因及解决方法
- 设置头像框为圆形,且图片填充头像框
- linux 查看zookeeper目录,查看zookeeper注册中心是否有注册服务
- 孙溟㠭(展)为秘鲁总统夫人‘埃莲娜卡尔普托莱多’女士治名章篆刻印章
- linux火狐中设置中文,Ubuntu中firefox设置成中文