Converting Between YUV and RGB
2014-07-14 15:54
423 查看
It is frequently necessary to convert between YUV pixel formats (used by the JPEG and MPEG compression methods) and RGB format (used by many hardware manufacturers.) The following formulas show how to compute a pixel's value in one format from the pixel value
in the other format.
YUV format allows for higher compression rates without a proportionately high loss of data, as the U and V portions can be highly compressed and computed from the non- or lowly-compressed Y portion.
Computer RGB888, or full-scale RGB, uses 8 bits each for the red, green, and blue channels. Black is represented by R = G = B = 0, and white is represented by R = G = B = 255. The 4:4:4 YUV format uses 8 bits each for the Y, U, and V channels.
The following formulas define the conversion from RGB to YUV:
These formulas produce 8-bit results using coefficients that require no more than 8 bits of (unsigned) precision. Intermediate results require up to 16 bits of precision.
The following coefficients are used in conversion process:
Using the previous coefficients and noting that
These formulas use some coefficients that require more than 8 bits of precision to produce each 8-bit result, and intermediate results require more than 16 bits of precision.
Note All units range from 0 (zero) to 1.0 (one). In DirectDraw, they range from 0 to 255. Overflow and underflow can (and does) occur, and the results must be saturated.
To convert 4:2:0 or 4:2:2 YUV to RGB, convert the YUV data to 4:4:4 YUV, and then convert from 4:4:4 YUV to RGB.
in the other format.
YUV format allows for higher compression rates without a proportionately high loss of data, as the U and V portions can be highly compressed and computed from the non- or lowly-compressed Y portion.
Computer RGB888, or full-scale RGB, uses 8 bits each for the red, green, and blue channels. Black is represented by R = G = B = 0, and white is represented by R = G = B = 255. The 4:4:4 YUV format uses 8 bits each for the Y, U, and V channels.
Converting RGB888 to YUV
The following formulas define the conversion from RGB to YUV:Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16 U = ( ( -38 * R - 74 * G + 112 * B + 128) >> 8) + 128 V = ( ( 112 * R - 94 * G - 18 * B + 128) >> 8) + 128
These formulas produce 8-bit results using coefficients that require no more than 8 bits of (unsigned) precision. Intermediate results require up to 16 bits of precision.
Converting 8-bit YUV to RGB888
The following coefficients are used in conversion process:C = Y - 16 D = U - 128 E = V - 128
Using the previous coefficients and noting that
clip()denotes clipping a value to the range of 0 to 255, the following formulas provide the conversion from YUV to RGB:
R = clip(( 298 * C + 409 * E + 128) >> 8) G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8) B = clip(( 298 * C + 516 * D + 128) >> 8)
These formulas use some coefficients that require more than 8 bits of precision to produce each 8-bit result, and intermediate results require more than 16 bits of precision.
Note All units range from 0 (zero) to 1.0 (one). In DirectDraw, they range from 0 to 255. Overflow and underflow can (and does) occur, and the results must be saturated.
To convert 4:2:0 or 4:2:2 YUV to RGB, convert the YUV data to 4:4:4 YUV, and then convert from 4:4:4 YUV to RGB.
相关文章推荐
- Converting Between YUV and RGB
- RGB "Bayer" Color and MicroLenses, convertion between RGB and YUV
- 【转载】#457 Converting Between enums and their Underlying Type
- Converting between XML and JSON
- Converting Between ASCII and EBCDIC
- YUV_and_RGB
- How to make conversion between RGB and HSV? [Python sourcecode]
- 【转载】#458 Errors While Converting Between enum and Underlying Type
- Recipe 1.2. Converting Between Characters and Numeric Codes(Python Cookbook)
- Command for converting between ASCII text files and binary files
- Converting between decimal numbers and 8-bit binary numbers
- How to make conversion between RGB and HSV? [Python sourcecode]
- [Python]Converting Between Characters and Numeric Codes
- ITU601 Matrix to convert between YCbCr and RGB
- ITU709 Matrix to convert between YCbCr and RGB
- EBU Matrix to convert between YCbCr and RGB
- Converting between ROS images and OpenCV images
- Converting Between Binary and Decimal in C#
- yuv and rgb
- MS Matrix to convert between YCbCr and RGB