RGB和YUV概念
RGB方式:(必定是Packet形式存放数据)
①RGB565
②RGB888(真彩色)
③ARBG=RGB+A透明度
本质:只记录R、G、B三基色各自的亮度
优势:方便数字化表达,广泛用于数字化彩色显示器,计算机编程等领域。
劣势:和传统的灰度图兼容不好,表达颜色的效率不高
YUV格式
YUV即YCbCr(色彩空间)//源自2个标准,但几乎相同
Y表示亮度,U和V表示色度。只有Y就是黑白图像,再加上UV就是彩色图像了。//VU=128
优势:让彩色系统和传统黑白系统很好的兼容。
YUV 格式:
【YUV】①【默认】打包(packed)格式 [YUV]+[YUV]… 三分量同平面
【YUVp】②平面(planar)格式。使用三个数组分开存放 三个分量分别处于三个平面
①P(planar) [Y]+[U]+[V]
②SP(Semi-Planar) [Y]+[U+V] //semi半独立式
YUV分类:
1、444 Y:U:V=4:4:4 完全取样
2、422 Y:U:V=4:2:2 2:1的水平取样,垂直完全采样。
3、420 Y:U:V=4:1:1 2:1的水平取样,垂直2:1采样。 UV互相援引,即每一行4:2:0和4:0:2交替出现
4、411 Y:U:V=4:1:1 4:1的水平取样,垂直完全采样
YUV420P的4种分类:1、是否semir 2、UV先后顺序
YU12/I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP
//P planer 表示数据存放再不同palner
//S semir 表示UV一起or独自存放
YUV422
YUYV/YUY2
YVYU
UYVY
V4L2文档翻译(十) 介绍了V4L2所支持的YUV格式枚举
2、YUV和RGB的关系及转换
相互转换:用数学方法互相换算,是个典型的浮点运算过程。
YUV转灰度图:UV=128
rgb->BMP(文件头+信息头+像素数据)
按照小端存储顺序RRGB=0x00bbggrr调整然后写入像素数据
2种像素格式的转换公式(线性量化与否)
RGB常用颜色:常用颜色RGB、灰度值
其中: #808080 Gray 灰色 即R=G=B=128
根据换算公式:
Y = 0.299R+0.587G+0.114B
U = -0.169R-0.331G+0.5B+128
V = 0.5R-0.419G-0.081B+128
↓↓↓
由灰度图像R=G=B可知:Y=R=G=B, U=128, V=128.
故YUV420P去颜色(变成灰度图)//UV颜色→设置为128
memset(pic+wh,128,wh/2);//把后面部分的1/3像素’UV’数据转换成灰度色
3、YUV和RBG的转换
3.1 YUV和RGB的转换关系
未量化: Y/U/V ~(0-255)
1.小数形式,未量化
R = Y + 1.4075 * (V-128);
G = Y - 0.3455 * (U-128) - 0.7169*(V-128);
B = Y + 1.779 * (U-128);
Y = 0.299*R + 0.587*G + 0.114*B;
U = (B-Y)/1.772;
V = (R-Y)/1.402; (U~(-128-127))
或写为:
Y = 0.299*R + 0.587*G + 0.114*B;
U = -0.169*R - 0.331*G + 0.5 *B ;
V = 0.5 *R - 0.419*G - 0.081*B;
2.整数形式(减少计算量)未量化
R= Y + ((360 * (V - 128))>>8) ;
G= Y - (( ( 88