視訊採集處理之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:色度訊號的掃描線數量和亮度訊號一樣多,但是每條掃描線上的色度取樣點數卻只有亮度訊號的一半。
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.565V'= (RY)*0.713
YUV轉RGB的簡化公式
R = Y + 1.403V'
G = Y - 0.344U' - 0.714V'
B = Y + 1.770U'
通常情況下,進行影象處理使用的是灰度圖(YUV、YCrCb),顯示的時候一般採用RGB格式的影象。