YUV基础知识

图像的基础

像素、分辨率 和RGB的基本概念。

RBG888是24位的,RGBA是32位的。

数据和图像的关系

图像是数据,屏幕是显示设备,图像数据经过驱动程序让屏幕显示图像。Bitmap是BGR格式,若要现实,需将BGR数据转化为RGB数据。

PPI(pixels per inch),DPI(Dots pen inch),两者基本属于1:1的关系,PPI >300 属于视网膜级别。

分辨率

X轴像素个数✖️Y轴像素的个数。常见的宽高比16:9/4:3。常见的分辨率:360P/720P/1K/2K都是16:9的。

帧率

每秒钟采集/播放的图像个数,动画基本在25帧/s,常见的帧率:15帧/s、30帧/s、60帧/s。

未编码的RGB码流

RGB码流 = 分辨率(宽✖️高)✖️ 3(Byte)* 帧率

YUV

YUV,也称YCbCr,Y表示明亮程度,UV的作用是描述影像色彩的饱和度。主要采样格式有YUV4:2:0、YUV4:2:2、YUV4:4:4。

原始图像

YUV基础知识

YUV的Y分量 

YUV基础知识

YUV的U分量

YUV基础知识

YUV的V分量 

YUV基础知识

 RGB与YUV的关系

RGB用于屏幕图片的展示,而YUV用于采集与编码。RGB与YUV可以相互转化。

YUV格式

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

YUV4:4:4 

YUV基础知识

YUV4:2:2

YUV基础知识

 YUV4:2:0

YUV基础知识

YUV数据量的计算

YUV = Y * 1.5,Y分量的1.5倍,YUV = RGB/2,是RGB数据的一半。

YUV4:2:0的存储格式 

 YUV基础知识

每一个Y的前四项对应一个U和V。

它的存储格式

planar(平面)

I420: YYYYYYYY  UU VV      =======>YUV420P

YV12: YYYYYYYY  VV UU      =======>YUV420P (常用于IOS)

packed(打包)

NV12:YYYYYYYY UVUV         =======>YUV420SP

NV12:YYYYYYYY VUVU         =======>YUV420SP(常用于Android)

YUV码流 = 分辨率(宽✖️高)✖️1.5✖️帧率

使用ffmpeg生成YUV

ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

使用ffplay播放YUV

ffplay -pix_fmt yuv420p -s 1280x544 out.yuv

这里的1280x544是视频分辨率,这个信息可以在生成yuv时,ffmpeg会显示出来。

使用ffplay播放Y分量

 ffplay -pix_fmt yuv420p -s 1280x544 -vf extractplanes='y' demovideo.yuv

使用ffmpeg提取各分量

ffmpeg -i demovideo.mp4 -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]'  demovideo_y.yuv -map '[u]'  demovideo_u.yuv  -map '[v]'  demovideo_v.yuv 

上一篇:显著性目标检测论文总结---SSF


下一篇:使用opencv的cvtColor()函数进行色彩空间转换