1. 程式人生 > >視訊採集處理之YUV資料格式

視訊採集處理之YUV資料格式

本設計中使用的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格式的影象。