直入正题吧,

关于YUYV编码流的官方介绍:

http://linuxtv.org/downloads/v4l-dvb-apis/V4L2-PIX-FMT-YUYV.html

我们一起看看,

YUYV 这种编码

In this format each four bytes is two pixels. Each four bytes is two Y's, a Cb and a Cr. Each Y goes to one of the pixels, and the Cb and Cr belong to both pixels. As you can see, the Cr and Cb components have half the horizontal resolution of the Y component. V4L2_PIX_FMT_YUYV is known in the Windows environment as YUY2.

每四字节表示两个像素,每四字节有两个Y,一个CB和CR。每一个Y分别属于一个像素,CB和CR共同属于这两个点。这种格式在WINDOWS环境下叫YUY2

字节顺序. 表格中每个单元一个字节

start + 0: Y'00 Cb00 Y'01 Cr00 Y'02 Cb01 Y'03 Cr01
start + 8: Y'10 Cb10 Y'11 Cr10 Y'12 Cb11 Y'13 Cr11
start + 16: Y'20 Cb20 Y'21 Cr20 Y'22 Cb21 Y'23 Cr21
start + 24: Y'30 Cb30 Y'31 Cr30 Y'32 Cb31 Y'33 Cr31

实际分布.

0 1 2 3
0 Y C Y Y C Y
1 Y C Y Y C Y
2 Y C Y Y C Y
3 Y C Y Y C Y
根据这个,用每个点下的值乘换算公式,就可以得到对应RGB下的点,换算公式我就不多说了,讲到这里,直接贴代码把:
//YUV像素 转 RGB像素的函数
static void yuv_to_rgb_24(unsigned char y, unsigned char u, unsigned char v,unsigned char* r, unsigned char* g, unsigned char* b)
{int amp=255;double R,G,B;//conversion equationsB=amp*(0.004565*y+0.000001*u+0.006250*v-0.872);G=amp*(0.004565*y-0.001542*u-0.003183*v+0.531);R=amp*(0.004565*y+0.007935*u-1.088);//R, G and B must be in the range from 0 to 255    if (R < 0)R=0;if (G < 0)G=0;if (B < 0)B=0;if (R > 255)R=255;if (G > 255)G=255;if (B > 255)B=255;*r=(unsigned char)(R);*g=(unsigned char)(G);*b=(unsigned char)(B);}//TODO: width*height这个是图像的长宽,这里默认是24位色深,16位的话,原理一样,不懂留言问我吧。uint8_t * imageLine1;int    xx,yy;int    x,y;int bpl,Bpp,amp;double r,g,b;unsigned char Y,U,V;unsigned char R,G,B,RG,GB;imageLine1 = (uint8_t *)malloc(width*height*3);bpl=width*3;//bytes per line,Bpp=3;//bytes per pixel,/*TODO: 这里把图像像素组读到videoFrame里,根据自己的情况,从网络,从管道还是从其他地方  int ret;ret = read(STDIN_FILENO, videoFrame , width*height*2);*/for (yy = 0; yy < (height); yy++){for (xx =0; xx < (width/2); xx++){   x=4*xx;y=yy;U = videoFrame[width*2*y+x+3];             V = videoFrame[width*2*y+x+1];Y = videoFrame[width*2*y+x];yuv_to_rgb_24(Y, U, V, &R,&G,&B);imageLine1[(bpl*y)+(Bpp*x/2)]=B;imageLine1[(bpl*y)+(Bpp*x/2)+1]=G;imageLine1[(bpl*y)+(Bpp*x/2)+2]=R;Y = videoFrame[width*2*y+x+2];yuv_to_rgb_24(Y, U, V, &R,&G,&B);imageLine1[(bpl*y)+(Bpp*(x/2+1))]=B;mageLine1[(bpl*y)+(Bpp*(x/2+1))+1]=G;imageLine1[(bpl*y)+(Bpp*(x/2+1))+2]=R;}}
这代码是我从v4l2 sample code改过来的,他们只支持YUV420,不支持YUYV,于是我作了修改。
其他YUV格式的转换思路差不多,有时间的话感觉应该弄个lib,每个刚去接触视频编码的人都要看这个,挺浪费时间的。

YUYV 转 RGB 24相关推荐

  1. V4L2图像采集+图片格式转换(YUYV、RGB、JPEG)

    本篇转自博友https://blog.csdn.net/xuyangwyw/article/details/40476653文章,感谢分享. 废话不多说,直接开始流程. 1.驱动支持     在那位法 ...

  2. RGB 24和YUY2相互转换

    YUY2经常用于电视制式以及许多摄像头的输出格式.而我们在处理时经常需要将其转化为RGB进行处理,这里简单介绍下YUY2(YUV)与RGB之间相互转化的关系: http://msdn2.microso ...

  3. RGB、YUY2、YUYV、YVYU、UYVY、AYUV、YUV444、YUV422、YUV420、YUV411

    1) YUV 4:4:4YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节.下面的四个像素为: [Y0 ...

  4. 谈谈RGB、YUY2、YUYV、YVYU、UYVY、AYUV

    计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red).G(Green).B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红.绿.蓝磷光材料发光而产生色彩. ...

  5. RGB、YUY2、YUYV、YVYU、UYVY、AYUV

    小知识:RGB与YUV----摘自<DirectShow实务精选> 作者:陆其明 计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red).G(Green).B(Blue)相加 ...

  6. 谈谈“色彩空间表示方法”——RGB、YUY2、YUYV、YVYU、UYVY、AYUV

    转自:http://bbs.chinavideo.org/viewthread.php?tid=4143 还可参考http://www.fourcc.org/yuv.php 小知识:RGB与YUV-- ...

  7. RGB、YUY2、YUYV、YVYU、UYVY、AYUV格式详解

    计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red).G(Green).B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红.绿.蓝磷光材料发光而产生色彩. ...

  8. FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战

    5.颜色空间转换RGB和YUV的原理与实战 三种颜色空间模型:RGB.YUV.HSV 一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间. 但被描述 ...

  9. RGB与YUV颜色空间

    计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red).G(Green).B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红.绿.蓝磷光材料发光而产生色彩. ...

最新文章

  1. c#.net调用pdf2swf.exe将pdf文件转换为swf,vs中运行正常,布署IIS服务器部署转换后文字部分为空白...
  2. 美国在理论计算机科学的研究重视,留学热门专业计算机之研究方向篇
  3. 关于datagridview自动增加行高度和显示全部内容的设置
  4. Python代码打包成exe文件
  5. 使用Travis-CI的SpringBoot应用程序的CI / CD
  6. 传输设备,光端机的应用及故障分析
  7. 微型计算机和pc的概念,微型计算机IBM-PC(0520)系统原理及应用
  8. 边缘计算精华问答 | 火爆的边缘计算为何兴起?
  9. mysql的实践小结的作文_MySql小结
  10. java 8-6 抽象的练习
  11. 转载:面向站长和网站管理员的Web缓存加速指南
  12. python学习(一)----基础语法
  13. php反射机制详解,PHP反射机制
  14. 计算机教室验收结果报告模板,课题结题验收总结报告powerpoint演示文稿.ppt
  15. 广州规划新增30条地铁 来看看线路图?
  16. fastreport 横向布局_FastReport.net 系列-----FastReport基本操作介绍(数据绑定,页面布局)...
  17. 利用python暴力破解rar压缩文件密码
  18. HTML/CSS入门(1)
  19. pdf转换成ppt的方法
  20. PL/0编译器(java version)–Pcode.java

热门文章

  1. 不错的武汉农家乐年会必去的地方,这里经济实惠让人印象深刻
  2. 有时候,细节决定成败
  3. 爬虫学习笔记1(超级详细)
  4. 【JavaScript UI库和框架】上海道宁与Webix为您提供用于跨平台Web应用程序开发的JS框架及UI小部件
  5. 一诺万金数字乡村管理平台
  6. 苹果键盘怎么手写_手写笔的魅力
  7. 邮储网络学院-员工行为规范题库
  8. 如何使用计算机创电子表格,Numbers怎么创建电子表格 Numbers创建表格教程
  9. 贺恩霆博士2019年3月1日起担任赛诺菲中国区总裁
  10. 智课雅思短语---四、Exploit to the full one’s favorableconditions and avoid unfavorable ones...