YUV420 to RGB
来源:互联网 发布:金融数据挖掘 编辑:程序博客网 时间:2024/05/20 20:57
Referenced to: http://en.wikipedia.org/wiki/YUV#Y.27UV420p_.28and_Y.27V12_or_YV12.29_to_RGB888_conversion
Y'UV420p (and Y'V12 or YV12) to RGB888 conversion
Y'UV420p is a planar format, meaning that the Y', U, and V values are grouped together instead of interspersed. The reason for this is that by grouping the U and V values together, the image becomes much more compressible. When given an array of an image in the Y'UV420p format, all the Y' values come first, followed by all the U values, followed finally by all the V values.
The Y'V12 format is essentially the same as Y'UV420p, but it has the U and V data switched: the Y' values are followed by the V values, with the U values last. As long as care is taken to extract U and V values from the proper locations, both Y'UV420p and Y'V12 can be processed using the same algorithm.
As with most Y'UV formats, there are as many Y' values as there are pixels. Where X equals the height multiplied by the width, the first X indices in the array are Y' values that correspond to each individual pixel. However, there are only one fourth as many U and V values. The U and V values correspond to each 2 by 2 block of the image, meaning each U and V entry applies to four pixels. After the Y' values, the next X/4 indices are the U values for each 2 by 2 block, and the next X/4 indices after that are the V values that also apply to each 2 by 2 block.
Translating Y'UV420p to RGB is a more involved process compared to the previous formats. Lookup of the Y', U and V values can be done using the following method:
size.total = size.width * size.height;y = yuv[position.y * size.width + position.x];u = yuv[(position.y / 2) * (size.width / 2) + (position.x / 2) + size.total];v = yuv[(position.y / 2) * (size.width / 2) + (position.x / 2) + size.total + (size.total / 4)];rgb = Y'UV444toRGB888(y, u, v);
Here "/" is Div not division.
As shown in the above image, the Y', U and V components in Y'UV420 are encoded separately in sequential blocks. A Y' value is stored for every pixel, followed by a U value for each 2×2 square block of pixels, and finally a V value for each 2×2 block. Corresponding Y', U and V values are shown using the same color in the diagram above. Read line-by-line as a byte stream from a device, the Y' block would be found at position 0, the U block at position x×y (6×4 = 24 in this example) and the V block at position x×y + (x×y)/4 (here, 6×4 + (6×4)/4 = 30).
- YUV420 to RGB
- RGB to YUV420转换
- RGB to YUV420 原代码
- Java实现YUV420 TO RGB的源代码
- YUV420--》rgb
- rgb转yuv420,yuv420转rgb
- RGB YUV420 相互转换
- YUV420转RGB
- YUV420转换成RGB
- yuv420转rgb
- RGB转YUV420
- RGB转YUV420
- YUV420转YUV444 , YUV420转RGB
- YUV420转YUV444 , YUV420转RGB
- YUV420转YUV444 , YUV420转RGB
- YUV420转YUV444 , YUV420转RGB
- YUV420转YUV444 , YUV420转RGB .
- YUV420转换为RGB MATLAB
- resetlogs & noresetlogs 探究
- Android 对话框(Dialog)大全 建立你自己的对话框
- UIApplication 结构
- 理解嵌入式开发中的一些硬件相关的概念
- mysql root 密码忘记
- YUV420 to RGB
- 9i statspack 自动采集 crontab
- How to Play, Record, and Edit Videos in iOS
- PMP考试经历,实战经验,希望对后来者有用
- Oracle RESETLOGS 和 NORESETLOGS 区别说明
- “移动革命”改变生活 开发者需“直面”用户
- KVC,KVO的一些原理理解与使用介绍
- pthread_create函数的详细讲解(包括向线程函数传递参数详解)
- 项目中出现 ANR