Converting Between YUV and RGB
来源:互联网 发布:算法的效率类型 编辑:程序博客网 时间:2024/06/07 06:09
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.
Converting RGB888 to YUV
The following formulas define the conversion from RGB to YUV:
Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16U = ( ( -38 * R - 74 * G + 112 * B + 128) >> 8) + 128V = ( ( 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 - 16D = U - 128E = 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
- Converting Between YUV and RGB
- RGB "Bayer" Color and MicroLenses, convertion between RGB and YUV
- Converting Between XML and JSON
- Converting between XML and JSON
- Converting Between ASCII and EBCDIC
- yuv and rgb
- [Python]Converting Between Characters and Numeric Codes
- Converting text files between Unix and Windows
- Converting between ROS images and OpenCV images
- Recipe 1.2. Converting Between Characters and Numeric Codes
- Lesson 11 Converting between array and matrix expressions
- 颜色知多少-YUV and RGB
- Matrix to convert between HSL and RGB
- Matrix to convert between HSV and RGB
- YUV&RGB
- RGB YUV
- YUV & RGB
- 彻底搞懂oracle的标量子查询
- 集群、分布式计算、负载均衡的区别
- 使用ngrok快速地将本地Web服务映射到外网
- mybatis对数字的处理
- getRealPath()和getContextPath()的区别
- Converting Between YUV and RGB
- ubuntu 13.04 安装qpid和openmama
- storm入门教程 第一章 前言
- Speed Limit
- 软件工程师必学的9件事
- BTrace 用法二
- POJ 3624 _01 背包水题!
- 【Leetcode长征系列】Reverse Integer
- 抱歉了,大伙,不小心把硬盘格了,教程没法写了