http://blog.csdn.net/skdev/article/details/6583028
1简介
YUV是种颜色编码方法,是彩色电视为了兼容黑白电视而发展起来的。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),然后对这三个信号分别进行编码。Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理,而CB和CR则为蓝色和红色的浓度偏移量成份。
2 YUV采样格式
(1) YUV 4:4:4
YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。
下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
(2) YUV 4:2:2
每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存。
下面的四个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为:Y0 U0 Y1 V1 Y2 U2 Y3 V3
映射出像素点为:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
(3) YUV 4:1:1
4:1:1的色度抽样,是在水平方向上对色度进行4:1抽样。对于低端用户和消费类产品这仍然是可以接受的。对非压缩的8比特量化的视频来说,每个由4个水平方向相邻的像素组成的宏像素需要占用6字节内存。
下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为: Y0 U0 Y1 Y2 V2 Y3
映射出像素点为:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]
(4)YUV4:2:0
4:2:0并不意味着只有Y,Cb而没有Cr分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。
下面八个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
[Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]
存放的码流为: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] [Y7U2 V7] [Y8 U2 V7]
3 YUV 存储格式
YUV格式分为packed格式和planar格式,packed格式会将YUV数据按顺序放进数组里,planar则分将YUV的数据分为三部分放进数组里,即先放Y部分的数据,再放U,接着是V的数据。
3.1 Packed YUV Formats
Label | Bits per pixel | Description |
32 | Combined YUV and alpha | |
8 | Cirrus Logic format with 4 pixels packed into a u_int32. A form of YUV 4:1:1 wiht less than 8 bits per Y, U and V sample. | |
16 | Essentially a copy of UYVY except that the sense of the height is reversed - the image is upside down with respect to the UYVY version. | |
8 | Apparently a duplicate of Y800 (and also, presumably, "Y8 ") | |
IRAW | ? | Intel uncompressed YUV. I have no information on this format - can you help? |
16 | Interlaced version of UYVY (line order 0, 2, 4,....,1, 3, 5....) registered by Silviu Brinzei of LEAD Technologies. | |
12 | Interlaced version of Y41P (line order 0, 2, 4,....,1, 3, 5....) registered by Silviu Brinzei of LEAD Technologies. | |
12 | 12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec. This is equivalent to Y411 | |
24 | 24 bit format used in mode 0 of the IEEE 1394 Digital Camera 1.04 spec | |
16 | YUV 4:2:2 (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). A macropixel contains 2 pixels in 1 u_int32. This is a suplicate of UYVY except that the color components use the BT709 color space (as used in HD video). | |
16 | A direct copy of UYVY registered by NVidia to work around problems in some old codecs which did not like hardware which offered more than 2 UYVY surfaces. | |
UYVP | 24? | YCbCr 4:2:2 extended precision 10-bits per component in U0Y0V0Y1 order. Registered by Rich Ehlers of Evans & Sutherland. (Awaiting confirmation of component packing structure) |
16 | YUV 4:2:2 (Y sample at every pixel, U and V sampled at every second pixel horizontally on each line). A macropixel contains 2 pixels in 1 u_int32. | |
32 | 10-bit 4:2:2 YCrCb equivalent to the Quicktime format of the same name. | |
V422 | 16 | I am told that this is an upside down version of UYVY. |
V655 | 16? | 16 bit YUV 4:2:2 format registered by Vitec Multimedia. I have no information on the component ordering or packing. |
VYUY | ? | ATI Packed YUV Data (format unknown but you can get hold of a codec supporting ithere) |
16 | Direct copy of UYVY as used by ADS Technologies Pyro WebCam firewire camera. | |
16 | YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel. | |
16 | Duplicate of YUY2 | |
16 | A direct copy of YUY2 registered by NVidia to work around problems in some old codecs which did not like hardware which offered more than 2 YUY2 surfaces. | |
16 | YUV 4:2:2 as for UYVY but with different component ordering within the u_int32 macropixel. | |
12 | YUV 4:1:1 (Y sample at every pixel, U and V sampled at every fourth pixel horizontally on each line). A macropixel contains 8 pixels in 3 u_int32s. | |
12 | YUV 4:1:1 with a packed, 6 byte/4 pixel macroblock structure. | |
8 | Packed YUV format with Y sampled at every second pixel across each line and U and V sampled at every fourth pixel. | |
12 | Format as for Y41P but the lsb of each Y component is used to signal pixel transparency . | |
16 | Format as for UYVY but the lsb of each Y component is used to signal pixel transparency . | |
24? | YCbCr 4:2:2 extended precision 10-bits per component in Y0U0Y1V0 order. Registered by Rich Ehlers of Evans & Sutherland. | |
8 | Simple, single Y plane for monochrome images. | |
8 | Duplicate of Y800 as far as I can see. | |
16 | 16-bit uncompressed greyscale image. |
UYVY存储结构
UYVY 是一种最常用的 YUV 4:2:2 格式,其数据排列如下:
3.2 Planar YUV Formats
Label | Bits per pixel | Description |
9 | 8 bit Y plane followed by 8 bit 4x4 subsampled V and U planes. Registered by Intel. | |
9? | Registered by Intel., this is the format used internally by Indeo video code | |
9.5 | As YVU9 but an additional 4x4 subsampled plane is appended containing delta information relative to the last frame. (Bpp is reported as 9) | |
16 | 8 bit Y plane followed by 8 bit 2x1 subsampled V and U planes. | |
12 | 8 bit Y plane followed by 8 bit 2x2 subsampled V and U planes. | |
12 | 8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes. | |
12 | Duplicate FOURCC, identical to I420. | |
12 | 8-bit Y plane followed by an interleaved U/V plane with 2x2 subsampling | |
12 | As NV12 with U and V reversed in the interleaved plane | |
12 | As YV12 except the U and V planes each have the same stride as the Y plane | |
12 | Similar to IMC1 except that the U and V lines are interleaved at half stride boundaries | |
12 | As IMC1 except that U and V are swapped | |
12 | As IMC2 except that U and V are swapped | |
12 | Format similar to YV12 but including a level of indirection. | |
Y41B | 12? | Weitek format listed as "YUV 4:1:1 planar". I have no other information on this format. |
Y42B | 16? | Weitek format listed as "YUV 4:2:2 planar". I have no other information on this format. |
8 | Simple, single Y plane for monochrome images. | |
8 | Duplicate of Y800 as far as I can see. | |
12 | Awaiting clarification of format. | |
16 | Awaiting clarification of format. |
Y42B存储结构
YCbCr 4:2:2 的方式存储
4 YUV与RGB的转换关系
yuv422 planar to rgb565
转换公式:
R=Y+1.4075*(V-128)
G=Y-0.3455*(U-128) - 0.7169*(V-128)
B=Y+1.779*(U-128)
为了加快运算速度,采用下面的整形计算法:
u = YUVdata[UPOS] - 128;
v = YUVdata[VPOS] - 128;
rdif = v + ((v * 103) >> 8);
invgdif = ((u * 88) >> 8) +((v * 183) >> 8);
bdif = u +( (u*198) >> 8);
r = YUVdata[YPOS] + rdif;
g = YUVdata[YPOS] - invgdif;
b = YUVdata[YPOS] + bdif;
r=r>255?:255:(r<0:?0:r);
g=g>255?:255:(g<0:?0:g);
b=b>255?:255:(b<0:?0:b);
以上得到的是rgb888的数据,再将rgb888转为rgb555
RGBdata[1] =( (r & 0xF8) | ( g >> 5) );
RGBdata[0] =( ((g & 0x1C) << 3) | ( b >> 3) );
YUV422 Planar FORMAT size:
size=width*height*2;
YSIZE = size/2;
USIZE = size/4;
VSIZE = size/4;
YPOS=0;
UPOS=YPOS + size/2;
VPOS=UPOS + size/4;