YUV2格式转换成RGB24格式解析

转载 2011年01月18日 08:53:00

我们从CMOS摄像头采集到的数据一般是YUV2格式的,YUV2是YUYV,YVYU,VYUY,UYVY,四种格式的统称,在源代码中,采用YUYV格式的数据转换为RGB24格式的数据,当然,通过修改某些参数,YUV2所有格式的数据都可以转换成RGB24即RGB888格式的数据。

首先,我们采集到的数据是以Y0,V0,Y1,U0,  Y2,V2,Y3,U2  …的格式存放在内存中,这里,我是通过串口将该块内存中的数据打印到文件中,并将数据稍作编辑,即可作为带转换的YUV2数据。

YUV与RGB的转换关系

可以看到,Y0,V0…都是8位数据,占1个字节,但每个16进制数以字符存放在内存中,那么Y,U,V就是占2个字节,Y0,V0,Y1,U0,共32位,包含两个像素,转换为RGB24时,关系如下:

RGB0=(Y0,V0,U0),RGB1=(Y1,V0,U0),依次类推,可以看到每个YUV2占32位,转换为2个RGB时,占48位,所有,字符长度增加了0.5倍。

1

从文件中读取数据,并分配内存大小,YUV的数据大小为WIDTH*HEIGHT*2,而RGB数据大小为

WIDTH*HEIGHT*3;

具体转换算法:

1

图片中,是网上常用的两种转换算法,(注释部分是一种,在*号之间的部分是目前在使用的一种)

 

存在问题:

核心部分就是从文件中读取数据,分配内存,并将数据进行转换,然后放回文件中。但我们从文件中读取到的数据均为字符型,而在转换关系中,用到的数据均为数值型,所以需要对数据进行转换处理,算法如下:

1

以上部分是将字符型数据转换成数值型,另一方面,存入文件中,还应当将数值型数据转换成字符型,即上图转换算法的逆算法如下:

1

到此,整个转换算法分析完毕。

YUV格式学习:Y转换成RGB24

除了各种YUV格式转换成RGB外,还有一种是只转Y到RGB,显示出来的图像就是灰度图(因为Y是亮度),也可以理解为黑白图吧。...
  • subfate
  • subfate
  • 2015年08月07日 13:20
  • 1178

rgb格式的几个关键问题

   rgb颜色空间对于搞视频图像编程的程序员应该并不陌生。一类称为rgb1、rgb4、rgb8等调色板格式,对于这几类格式,数据结构后面往往会带有一个调色板,图像中的像素值并不真正代表颜色值,而是代...
  • wchm_seu
  • wchm_seu
  • 2010年05月15日 15:13
  • 4048

ffmpeg进行YUV420P和RGB24转换

有两种方式可以进行图像像素之间的转换》 ①   avpicture_fill(&pic, buffer, PIX_FMT_RGB24, width, height)        sws_getc...
  • chen_0306
  • chen_0306
  • 2015年02月10日 23:25
  • 1747

YUV12和YUV2格式

MPEG 储存的 YU(Cb)V(Cr) 格式是遵循 CCIR601,也就是 ITU-R BT.601 的规范,Y 亮度的范围是 16~235,UV(CbCr) 色度是以无色 =128 为中心,范围是...
  • coloriy
  • coloriy
  • 2011年08月08日 10:38
  • 2500

YV12 格式的图片转换为 RGB24 格式

bool YV12_to_RGB24(unsigned char* pYV12, unsigned char* pRGB24, int iWidth, int iHeight) { if(!pYV12...
  • think_embed
  • think_embed
  • 2013年07月22日 11:53
  • 4171

YUV格式学习:YUYV、YVYU、UYVY、VYUY格式转换成RGB24

前面文章讲过题目中的YUYV、YVYU、UYVY、VYUY格式,它们都是YUV422的打包格式——即在内存中,Y、U、V都是挨着排序的。它们的名称就表示了Y、U、V的顺序。像YUYV,就是Y、U、Y、...
  • subfate
  • subfate
  • 2015年08月05日 22:07
  • 1961

YUV422P、YV16、NV16、NV61格式转换成RGB24

YUV422有打包格式(Packed),一如前文所述。同时还有平面格式(Planar),即Y、U、V是分开存储的,每个分量占一块地方,其中Y为width*height,而U、V合占width*heig...
  • cupider88
  • cupider88
  • 2017年01月20日 15:34
  • 597

YUV422格式的数据转换成RGB24

做相机类程序是经常遇到YUV格式转RGB格式的操作,以下是一个简略有效的算法 typedef unsigned char uint8_t; void yuv422_to_rgb24(unsigne...
  • guotenfei
  • guotenfei
  • 2013年07月01日 13:58
  • 1074

YUYV格式到RGB格式的转换

http://blog.chinaunix.net/uid-21410064-id-3248638.html YUYV格式到RGB格式的转换:  为什么YUYV格式要转到RGB格式,视频的...
  • dai_xiangjun
  • dai_xiangjun
  • 2014年11月27日 13:30
  • 1358

YUV格式学习:YUV422P、YV16、NV16、NV61格式转换成RGB24

对于YUV422的格式,网上有一大堆资料,这里就不说了。直奔主题,给出如何转换的函数,一如既往,只用代码说事。...
  • subfate
  • subfate
  • 2015年08月05日 22:23
  • 3539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:YUV2格式转换成RGB24格式解析
举报原因:
原因补充:

(最多只允许输入30个字)