YUV格式学习:YUYV、YVYU、UYVY、VYUY格式转换成RGB24
来源:互联网 发布:java中类和对象的关系 编辑:程序博客网 时间:2024/05/31 04:03
前面文章讲过题目中的YUYV、YVYU、UYVY、VYUY格式,它们都是YUV422的打包格式——即在内存中,Y、U、V都是挨着排序的。它们的名称就表示了Y、U、V的顺序。像YUYV,就是Y、U、Y、V、Y、U、Y、V。在做转换时,就显得很容易、简单了。
因为极其相近,故在将这几种格式全部封闭到一个函数里做。代码如下:
void yuv422packed_to_rgb24(YUV_TYPE type, unsigned char* yuv422p, unsigned char* rgb, int width, int height){ int y, cb, cr; int r, g, b; int i = 0; unsigned char* p; unsigned char* p_rgb; p = yuv422p; p_rgb = rgb; init_yuv422p_table(); for (i = 0; i < width * height / 2; i++) { switch(type) { case FMT_YUYV: y = p[0]; cb = p[1]; cr = p[3]; break; case FMT_YVYU: y = p[0]; cr = p[1]; cb = p[3]; break; case FMT_UYVY: cb = p[0]; y = p[1]; cr = p[2]; break; case FMT_VYUY: cr = p[0]; y = p[1]; cb = p[2]; break; default: break; } r = MAX (0, MIN (255, (V[cr] + Y1[y])/10000)); //R value b = MAX (0, MIN (255, (U[cb] + Y1[y])/10000)); //B value g = MAX (0, MIN (255, (Y2[y] - 5094*(r) - 1942*(b))/10000)); //G value // 此处可调整RGB排序,BMP图片排序为BGR // 默认排序为:RGB p_rgb[0] = r; p_rgb[1] = g; p_rgb[2] = b; switch(type) { case FMT_YUYV: case FMT_YVYU: y = p[2]; break; case FMT_UYVY: case FMT_VYUY: y = p[3]; break; default: break; } r = MAX (0, MIN (255, (V[cr] + Y1[y])/10000)); //R value b = MAX (0, MIN (255, (U[cb] + Y1[y])/10000)); //B value g = MAX (0, MIN (255, (Y2[y] - 5094*(r) - 1942*(b))/10000)); //G value p_rgb[3] = r; p_rgb[4] = g; p_rgb[5] = b; p += 4; p_rgb += 6; }}
在做转换时,要注意YUV422采样格式,2个Y共用1个U和1个V,因此每一次循环就是读取1个Y、1个U和V转换成R、G、B,再读取下一个Y、U、V。由于UV共用,所以第2次转换时不用再给U、V赋值了。
综上,代码依然十分简单。
2015.8.5 晚上 李迟
0 0
- YUV格式学习:YUYV、YVYU、UYVY、VYUY格式转换成RGB24
- YUV格式学习:填充YUV444以及YUYV、YVYU、UYVY、VYUY
- 关于RGB、YUY2、YUYV、YVYU、UYVY、AYUV DirectShow中常见的RGB/YUV格式
- 关于RGB、YUY2、YUYV、YVYU、UYVY、AYUV DirectShow中常见的RGB/YUV格式
- YUV格式学习:Y转换成RGB24
- RGB、YUY2、YUYV、YVYU、UYVY、AYUV格式详解
- RGB、YUY2、YUYV、YVYU、UYVY、AYUV格式详解
- RGB、YUY2、YUYV、YVYU、UYVY、AYUV格式详解
- RGB、YUY2、YUYV、YVYU、UYVY、AYUV格式详解
- YUV格式学习:YUV444转换RGB24
- YUV格式学习:YUV422P、YV16、NV16、NV61格式转换成RGB24
- YUV格式学习:YUV420P、YV12、NV12、NV21格式转换成RGB24
- YUV格式学习:YUV420P、YV12、NV12、NV21格式转换成RGB24
- YUV格式说明 YUYV JPEG
- YUV格式说明 YUYV JPEG
- 谈谈RGB、YUY2、YUYV、YVYU、UYVY、AYUV
- RGB、 YUY2、YUYV、YVYU、UYVY与AYUV
- 谈谈RGB、YUY2、YUYV、YVYU、UYVY、AYUV_
- zookeeper原理
- 8.5省选模拟总结
- [PyQt] PyQt4写的音乐播放器
- 二叉树的分层遍历
- 最短路算法
- YUV格式学习:YUYV、YVYU、UYVY、VYUY格式转换成RGB24
- Leetcode: House Robber
- machine learning in coding(python):pandas数据包DataFrame数据结构简介
- 关于校园网出现“感叹号”而不能上网的解决方案。
- 如何提升Visual Studio 2010 的速度
- leetcode Compare Version Numbers版本号比较
- 宽带离网用户分析(6) 不平衡学习
- source-php-usort
- mysql处理高并发数据,防止数据超读