视频采集处理之YUV数据格式

来源:互联网 发布:php常用开发工具 编辑:程序博客网 时间:2024/04/29 18:27

本设计中使用的USB摄像头输出视频数据是YUV422格式,只有弄清楚了YUV数据格式,才能通过编程获取正确的视频数据,下面就分析一下YUV422数据格式。

YUV的原理是亮度信息Y与色度信息UV分离,其中"Y"表示明亮度(Lumina nce或Luma),也就是灰阶值;而"U"和"V"表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。当只提取Y信息的时候,视频呈现黑白画面,也就是常说的灰度图像。

常见的YUV格式有:YUV444 YUV422 YUV420.......

YUV422是两个亮度信息Y共用一对UV信息。

每种YUV数据格式根据YUV分量存储的方式不同,又分成平面格式和打包格式。平面格式是指先存完Y分量再存U分量,再存V分量。打包格式是指YUV三分量按照一定的采样格式存储。比如YUV422的一种打包格式就是Y0 U0 Y1 V0 Y2 U2 Y3 V2.......

下面在分析一下YUV数据格式表示的每个像素点占的空间大小:

YUV444:色度信号的分辨率和亮度信号的分辨率是相同的,单位像素占的字节数: (4+4+4)/4 = 3,4:4:4 格式是一个打包格式,其中每个像素都被编码为四个连续字节,AYUV 内存布局组织顺序如下所示(标记了 A 的字节包含 alpha 的值)

| U0 | V0 | Y0 | A0 |    | U1 | V1 | Y1 | A1 |   | U2 | V2 | Y2 | A2 |  ......

YUV444------>32bitspp

YUV422:色度信号的扫描线数量和亮度信号一样多,但是每条扫描线上的色度采样点数却只有亮度信号的一半。单位像素占的字节数: (4+2+2)/4 = 2。

YUV422------>16bitspp

YUV422又分为两种格式:YUY2  UYVY

YUY2在内存的存放方式是:| Y0 | V0 | Y1 | V0 |    | Y2 | U1 | Y3 | V1 |   | Y4 | U2 | Y5 | V2 |  ......

UYVY在内存的存放方式是:| U0 | Y0 | V0 | Y1 |    | U1 | Y2 | V1 | Y3 |   | U2 | Y4 | V2 | Y5 |  ......

YUV420:无论是横向还是纵向,色度信号的分辨率都只有亮度信号的一半,单位像素占的字节数: (4+1+1)/4 = 1.5。

YUV420------>16bitspp

两种存放格式:

1、

| Y0 | Y1 | Y2 | Y3| ...... 

| U0 | U1 | ...... 

| V0 | V1 | ......

2、

| Y0 | Y1 | Y2 | Y3| ...... 

| V0 | V1 | ...... 

| U0 | U1 | ......

YUV经常有另外的名字, YCbCr ,其中Y与YUV 中的Y含义一致,Cb , Cr 同样都指色彩,,只是在表示方法上不同而已,Cb Cr 就是本来理论上的“分量/色差”的标识。C代表分量(是component的缩写)Cr、Cb分别对应r(红)、b(蓝)分量信号,Y除了g(绿)分量信号,还叠加了亮度信号。

RGB数据格式

RGB色彩模式通常用格式RGB(0,0,0)来表示颜色,括号中的3个数字分别表示红、绿、蓝的亮度值。如:黑色RGB(0,0,0)、白色RGB(255,255,255)、红色RGB(255,0,0)。

当红、绿、蓝三种颜色分量相同时就会形成灰色,比如RGB(128,128,128)。灰度颜色有256种变化,即从RGB(0,0,0)到RGB(255,255,255)共256种颜色。

RGB565

RGB565彩色模式, 一个像素占两个字节, 其中:
低字节的前5位用来表示B(BLUE)
低字节的后三位+高字节的前三位用来表示G(Green)
高字节的后5位用来表示R(RED)
Memory Layout如图:

RGB565,RGB555,RGB888的区别

正常的RGB24是由24位即3个字节来描述一个像素,R、G、B各8位。而实际使用中为了减少图像数据的尺寸,如视频领域,对R、G、B所使用的位数进行的缩减,如你所说的RGB565和RGB555。
RGB565 就是R-5bit,G-6bit,B-5bit
RGB555 就是R-5bit,G-5bit,B-5bit
RGB888 就是R-8bit,G-8bit,B-8bit ;其实这就是RGB24

至于Bitmap那是在RGB的像素数据基础上增加位图头数据而形成的文件格式。


一般BMP是RGB888, JPEG是YUV的。

RGB565 是16位的,2个字节,5+6+5,第一字节的前5位是R,后三位+第二字节前三位是G,第二字节后5位是B。

RGB555 也是16位的,2个字节,RGB各5位,有1位未用。

RGB888 是24位的,3个字节。


RGB数据的存放方式和YUV的打包格式存放方式相似。

YUV与RGB之间的换算:

RGB 转换成 YUV的标准公式

Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16

Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128

Cb = U = -( 0.148 * R) - (0.291 * G) + (0.439 * B) + 128

YUV 转换成 RGB的标准公式

B = 1.164(Y - 16) + 2.018(U - 128)

G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)

R = 1.164(Y - 16) + 1.596(V - 128)

RGB取值范围均为0~255,Y=0~255,U=-122~+122,V=-157~+157


RGB转YUV的简化公式

Y = 0.299R + 0.587G + 0.114B

U'= (BY)*0.565

V'= (RY)*0.713

YUV转RGB的简化公式

R = Y + 1.403V'

G = Y - 0.344U' - 0.714V'

B = Y + 1.770U'


通常情况下,进行图像处理使用的是灰度图(YUV、YCrCb),显示的时候一般采用RGB格式的图像。




















0 0
原创粉丝点击