日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

YUV视频格式分析

發布時間:2023/12/9 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YUV视频格式分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Andrew Huang <bluedrum@163.com> 轉載請注明作者及聯絡方式
在攝像頭之類編程經常是會碰到YUV格式,而非大家比較熟悉的RGB格式. 我們可以把YUV看成是一個RGB的變種來理解.
YUV的原理是把亮度與色度分離,研究證明,人眼對亮度的敏感超過色度。利用這個原理,可以把色度信息減少一點,人眼也無法查覺這一點。
YUV三個字母中,其中"Y"表示明亮度(Lumina nce或Luma),也就是灰階值;而"U"和"V"表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。用這個三個字母好象就是通道命令。

使用YUV的優點有兩個: 一.彩色YUV圖像轉黑白YUV圖像轉換非常簡單,這一特性用在于電視信號上。
二.YUV是數據總尺寸小于RGB格式
關于描述YUV格式,寫得比較好是這一篇文件 <<Video Rendering with 8-Bit YUV Formats>> http://msdn.microsoft.com/en-us/library/aa904813(VS.80).aspx

一.YUV格式與RGB格式的換算

關于YUV與RGB轉換
可以參見? http://www.fourcc.org/fccyvrgb.php
以下是標準公式
  • 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'

  • 如果只有Y信號分量而沒有U、V分量,那么這樣表示的圖像就是黑白灰度圖像。因此用YUV格式由彩色轉黑白信號相當簡單.? 在技術文檔里,YUV經常有另外的名字, YCbCr ,其中Y與YUV 中的Y含義一致,Cb , Cr 同樣都指色彩,,只是在表示方法上不同而已,Cb Cr 就是本來理論上的“分量/色差”的標識。C代表分量(是component的縮寫)Cr、Cb分別對應r(紅)、b(藍)分量信號,Y除了g(綠)分量信號,還疊加了亮度信號。
    還有一種格式是YPbPr格式,它與YCbPr格式的區別在于,其中YCbCr是隔行信號,YPbPr是逐行信號。數字信號都是YCbCr ,其應用領域很廣泛,JPEG、MPEG均采用此格式。在后文中,如無特別指明,講的YUV都是指YCbCr格式。
    而YPbPr一般是模擬信號,我引用兩段來說明兩者區別
  •   什么是YCbCr?
  •   YCbCr表示隔行分量端子,是屬于YUV經過縮放和偏移的翻版,常說的YUV也稱作YCbCr。其中Y與YUV 中的Y含義一致,Cb , Cr 同樣都指色彩,,只是在表示方法上不同而已,Cb Cr 就是本來理論上的“分量/色差”的標識。C代表分量(是component的縮寫)Cr、Cb分別對應r(紅)、b(藍)分量信號,Y除了g(綠)分量信號,還疊加了亮度信號。
  •   其中YCbCr是隔行信號,YPbPr是逐行信號。YCbCr 是在計算機系統中應用最多的一種信號,其應用領域很廣泛,JPEG、MPEG均采用此格式。
  •   什么是YPbPr?
  •   Y'CbCr 在模擬分量視頻(analog component video)中也常被稱為YPbPr,YPbPr是將模擬的Y、PB、PR信號分開,使用三條線纜來獨立傳輸,保障了色彩還原的準確性,YPbPr表示逐行掃描色差輸出.YPbPr接口可以看做是S端子的擴展,與S端子相比,要多傳輸PB、PR兩種信號,避免了兩路色差混合解碼并再次分離的過程,也保持了色度通道的最大帶寬,只需要經過反矩陣解碼電路就可以還原為RGB三原色信號而成像,這就最大限度地縮短了視頻源到顯示器成像之間的視頻信號通道,避免了因繁瑣的傳輸過程所帶來的圖像失真,保障了色彩還原的準確,目前幾乎所有大屏幕電視都支持色差輸入。

  • 二.YUV的存儲格式RGB格式中,一個24bpp像素要占用4字節空間。在YUV格式中,可以對于UV分量的數據壓縮,但是對圖像整體質量影響不大,這樣YUV所占的空間就比RGB要小一些不過RGB中 16bpp的 565格式每一個點只占2個字節,從這一點看也沒有省多少。不過視頻應用都是清一色的YUV應用。因此YUV的處理還是一個比較重要課題。
    YUV的存儲中與RGB格式最大不同在于,RGB格式每個點的數據是連繼保存在一起的。即R,G,B是前后不間隔的保存在2-4byte空間中。而YUV的數據中為了節約空間,U,V分量空間會減小。每一個點的Y分量獨立保存,但連續幾個點的U,V分量是保存在一起的,(反正人眼一般也看不出區別).這幾個點合起來稱為macro-pixel, 這種存儲格式稱為Packed格式。另外一種存儲格式是把一幅圖像中Y,U,V分別用三個獨立的數組表示。這種模式稱為planar模式。
    這里我們主要使用第一種Packed格式。
    2.1 采樣格式表示YUV格式,一般用Y,U,V三者的比率來表示不同格式,比如YUV420 表示三者是比值此是 4:4:4即一個點數據點,Y,U,V的空間都是一樣大小。目前主要有如下比例,注意所有格式中Y比值都是4,占一個字節,表示沒有減少采樣。不同格式中,減小只是UV的采樣值.
    • 4:4:4 表示色度值(UV)沒有減少采樣。即Y,U,V各占一個字節,加上Alpha通道一個字節,總共占4字節.這個格式其實就是24bpp的RGB格式了。
    • 4:2:2 表示UV分量采樣減半,比如第一個像素采樣Y,U,第二個像素采樣Y,V,依次類推,這樣每個點占用2個字節.二個像素組成一個宏像素.
    • 4:2:0? 這種采樣并不意味著只有Y,Cb而沒有Cr分量,這里的0說的U,V分量隔行才采樣一次。比如第一行采樣 4:2:0 ,第二行采樣 4:0:2 ,依次類推...在這種采樣方式下,每一個像素占用16bits或10bits空間.
    • 4:1:1 可以參考4:2:2分量,是進一步壓縮,每隔四個點才采一次U和V分量。一般是第0點采Y,U,第1點采Y,第3點采YV,第四點采Y,依次類推。

    除了4:4:4采樣,其余采樣后信號重新還原顯示后,會丟失部分UV數據,只能用相臨的數據補齊,但人眼對UV不敏感,因此總體感覺損失不大。4:2:2示例如果原始數據三個像素是 Y0 U0 V0 ,Y1 U1 V1,Y2 U2 V2,Y3 U3 V3經過4:2:2采樣后,數據變成了 Y0 U0 ,Y1 V1 ,Y2 U2,Y3 V3如果還原后,因為某一些數據丟失就補成 Y0 U0 V1,Y1 U0 V1,Y2 U2 V3 ,Y3 U3 Y2
    ? 4:1:1示例?? 原來四個像素為: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]存放的碼流為:??? Y0 U0???? ,Y1 , Y2? V2,?? Y3還原出像素點為:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]? 4:2:0示例下面八個像素為:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3] [Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]存放的碼流為:? Y0 U0 ,Y1, Y2 U2, Y3 ,Y5 V5, Y6, Y7 V7, Y8映射出的像素點為:[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7] [Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]

    YUV 4:4:4格式內存布局,每一個像素擁有完整的YUV,加上A(Alpha)
    YUV 4:2:2 小端字節序排列
    2.2 Four CC 碼關于YUV444,YUV422,YUV420的名稱還有別外一種命名方式,FOURCC 碼,上文中用就是這個命令,這Four CC使用四個字母的命名,?? FourCC全稱Four-Character Codes,是由4個字符(4 bytes)組成,是一種獨立標示視頻數據流格式的四字節,在wav、avi檔案之中會有一段FourCC來描述這個AVI檔案,是利用何種codec來編碼的。因此wav、avi大量存在等于“IDP3”的FourCC? http://zh.wikipedia.org/wiki/FourCC
    按fourcc的命名.http://www.fourcc.org/yuv.php
    YUV444 的FourCC 稱為 AYUVYUV422 的FourcCC 按字節序分為 YUY2 和UYVYYUV420 的FourcCC 按字節序分為 IMC1IMC2
    2.3 V4L2 采用編碼 我們一般是在V4L驅動里使用這一些編碼,而且V4L2也有一類對應的編碼.參見vedio2dev.h,在編程中要與實際排列對應上.它后面的定義值實際就是FourCC 碼.
    #define V4L2_PIX_FMT_YVU420? v4l2_fourcc('Y', 'V', '1', '2') /* 12? YVU 4:2:0???? */ #define V4L2_PIX_FMT_YUYV??? v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16? YUV 4:2:2???? */ #define V4L2_PIX_FMT_UYVY??? v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16? YUV 4:2:2???? */ #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16? YVU422 planar */ #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16? YVU411 planar */ #define V4L2_PIX_FMT_Y41P??? v4l2_fourcc('Y', '4', '1', 'P') /* 12? YUV 4:1:1???? */ #define V4L2_PIX_FMT_YUV444? v4l2_fourcc('Y', '4', '4', '4') /* 16? xxxxyyyy uuuuvvvv */ #define V4L2_PIX_FMT_YUV555? v4l2_fourcc('Y', 'U', 'V', 'O') 比如在CMOS攝像頭里 支持 V4L2_PIX_FMT_YVU420 ,它對應的是YV12 格式,查相應文檔,它是Plane格式,即Y,U,V分三個區排列
    YV120x32315659128 bit Y plane followed by 8 bit 2x2 subsampled V and U planes.

    This is the format of choice for many software MPEG codecs. It comprises an NxM Y plane followed by (N/2)x(M/2) V and U planes.

    ?HorizontalVertical
    Y Sample Period11
    V Sample Period22
    U Sample Period22

    ?

    Positive biHeight implies top-down image (top line first)


    總結

    以上是生活随笔為你收集整理的YUV视频格式分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。