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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

RGB、YUV像素基础知识及处理数据

發(fā)布時間:2024/4/11 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RGB、YUV像素基础知识及处理数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

RGB、YUV像素基礎知識及處理數(shù)據(jù)


目錄

  • RGB
  • YUV
  • RGB、YUV像素數(shù)據(jù)處理
  • 轉載自Gemfield的知乎文章:從YUV到RGB
    轉載自雷神的博客:視音頻數(shù)據(jù)處理入門:RGB、YUV像素數(shù)據(jù)處理


    1. RGB

    1. RGB基本概述

  • RGB色彩模式是工業(yè)界的一種顏色標準,是通過對紅?、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍三個通道的顏色,這個標準幾乎包括了人類視力所能感知的所有顏色,是運用最廣的顏色系統(tǒng)之一。

  • 通常情況下,RGB各有256級亮度,用數(shù)字表示為從0、1、2…直到255,所以每一個顏色用1個字節(jié)=8bit就可以完全在計算機內部表示出來。按照計算,256級的RGB色彩總共能組合出約1678萬種色彩,即256×256×256=16777216。通常也被簡稱為1600萬色或千萬色,也稱為24位色(2的24次方)。

  • 比如一張1080p的圖片,代表著有 1920 * 1080 個像素點。如果采用 RGB 編碼方式,每個像素點都有紅、綠、藍三個原色,其中每個原色占用 1 個字節(jié),每個像素占用3個字節(jié),則一張1080p的圖片就占用 1920 * 1280 * 3 / 1024 / 1024 = 7.03125MB 存儲空間。比如著名的BMP位圖就是這樣保存圖片的(所謂的RGB888格式,或者24位位圖格式)。

  • 圖片的信息量有7.03125MB并不代表對應的圖片文件的大小就是7.03125MB,因為兩點:

  • 圖片的信息會被壓縮,減小文件的大小;
  • 圖片文件會注入meta data,又會稍微增大文件大小;
  • 總體上圖片文件肯定是變小了。而壓縮又主要分為兩種:

  • 無損壓縮,比如BMP位圖文件——頂多是使用行程長度編碼(RLE,run-length encoding)來進行輕度的無損數(shù)據(jù)壓縮(COCO數(shù)據(jù)集的分割data也使用了RLE),所以7.03125MB大小的內容會保存為6MB左右的文件;
  • 有損壓縮,最流行的就是jpg了,各種復雜的壓縮算法,會根據(jù)圖片內容的不同,使得圖片文件的大小降低到幾十KB到幾百KB左右。
  • 2. RGB的格式

    簡單來講,RGB在計算機中的表示主要分為兩大類,一種是索引形式,一種是像素形式。

  • 索引:
  • 諸如RGB1,RGB4,RGB8,分別表示每個像素用1個bit,4個bit, 8個bit來表示,那么,這些bit存儲的并非是實際的R,G, B值,而是對應點的像素在調色板中的索引。
  • 像素形式:
  • 諸如RGB565,RGB555,RGB24,RGB32,ARGB32,這些格式,存儲的是每一個像素點的R,G,B值。比如RGB24,分別用8個bit去表示R, G, B。
  • 3. RGB圖片中的CHW和BGR概念

  • 以著名的圖像算法庫OpenCV為例,我們常常聽到一個概念:一個API輸出或者輸出的圖片格式是CHW還是HWC,是RGB還是BGR…但是這代表什么意思呢?
  • 使用一個例子來解釋下,在Python中,使用OpenCV來讀取一個圖片gemfield.jpg(640x640):
  • (640, 640, 3)這樣的結果一看就是hwc格式(HWC三個字母分別代表Height、Width、Channel),相當于在內存中,img是個三維數(shù)組,從外層向內層依次是height、width、channel;也就是說:img是由640個height組成的,每個height是由640個width組成的,每個width是由3個channel組成的。而在每個width上,如果是BGR格式,則一個width就是[B,G,R],如果是RGB的話,則一個width就是[R,G,B]。而OpenCV的imread輸出的是BGR格式,因此img對象看起來就是這樣的三維數(shù)組:
  • 如果想要把hwc格式轉換為chw格式,則使用numpy的transpose:
  • 那么就是chw格式了,img依然是BGR格式,依然是3維數(shù)組:由3個channel組成,每個channel由640個height組成,每個height由640個width組成。img在內存中看起來就是這樣:

  • 2. YUV

    1. YUV基本概述

  • 大家已經(jīng)知道的是,YUV 編碼采用了明亮度和色度表示每個像素的顏色。其中Y表示明亮度(Luminance、Luma),也就是灰階值。U、V 表示色度(Chrominance 或 Chroma)。Y’UV是工程師希望在黑白基礎結構中使用彩色電視時發(fā)明的。他們需要一種與黑白(B&W)電視兼容的信號傳輸方法,同時又能增加色彩。亮度分量已經(jīng)以黑白信號形式存在,于是他們添加了UV信號作為解決方案。

  • Y’UV模型根據(jù)一個亮度分量(Y’)和兩個色度分量(分別稱為U(藍色投影)和V(紅色投影))定義了色彩空間。Y’UV顏色模型用于PAL 復合彩色視頻(不包括PAL-N)標準中。先前的黑白系統(tǒng)僅使用亮度(Y’)信息。顏色信息(U和V)是通過副載波單獨添加的,因此黑白接收器仍然能夠以接收器的本機黑白格式接收和顯示彩色圖片。

  • Y’代表亮度分量(亮度),U和V代表色度(顏色)分量;術語Y’UV,YUV,YCbCr,YPbPr等的范圍有時是模棱兩可和重疊的。歷史上,術語YUV和Y’UV用于電視系統(tǒng)中顏色信息的特定模擬編碼,而YCbCr用于顏色信息的數(shù)字編碼,適用于視頻和靜止圖像壓縮和傳輸,例如MPEG和JPEG。如今,術語YUV在計算機行業(yè)中通常用于描述使用YCbCr編碼的文件格式。

  • YUV不是一種格式,而是有多種細分格式。從存儲格式維度和采樣格式維度來分別介紹下。

  • 2. YUV的存儲格式

  • 首先,YUV按照儲存方法的不同,可以分為packeted formats和planar formats;前者是YUV分量交叉排著,類似于RGB領域的hwc;后者是YUV分量分成三個數(shù)組存放,不摻和在一起,類似于RGB領域的chw。
  • 3. YUV的采樣格式

  • 其次,YUV根據(jù)采樣率和采樣方式的不同,又可以劃分為各種格式。
  • 要說YUV相比于RGB有什么優(yōu)勢,那就是節(jié)省空間。為什么呢?因為YUV分量中,UV分量對人眼來說不敏感,因此可以降低采樣率,而對人的視覺又不構成什么影響。以下面的YUV420格式來說:
  • 可以看到UV分量只有Y分量的四分之一,這樣每4個像素就是6個字節(jié)(而RGB是12個字節(jié)),相比RGB節(jié)省了一半空間。除了YUV420外,還有YUV444(和RGB一樣的空間大小)和YUV422等主流格式。
  • 4. 主流的YUV420格式

  • 這些主流YUV格式中,YUV420更常見(因為更節(jié)省空間啊),而從YUV420這種采樣格式引申出來,疊加上不同的存儲格式,就又可以細分為很多。你可以參考:http://www.fourcc.org/yuv.php 。
  • 當YUV420采樣格式疊加上planar 儲存格式后,可以產(chǎn)生出YUV420P和YUV420SP格式。YUV420P是Y之后U之后V來儲存,相當于RGB中的chw了,又可以細分為I420(又叫YU12)和YV12格式;而YUV420SP是Y之后UV交替…,又可以細分為NV12和NV21格式。這四種細分格式如下所示:
  • NV12 ,FourCC為0x3231564E ,1個像素12 bit, 8-bit Y plane,Y通道平面結束后是交叉進行的 U/V 通道平面,U/V使用2x2的采樣率(各是Y的四分之一)。
  • NV21 ,FourCC為0x3132564E ,1個像素12 bit, 和NV12一樣——除了U/V交叉的時候是先V再U,也就是U/V和V/U的區(qū)別;這個是Android上攝像頭圖像的標準;
  • I420 (也叫YU12),FourCC為0x30323449 ,1個像素12 bit,8 bit Y 通道平面結束后,是U通道平面,最后是V通道平面;
  • YV12 ,FourCC為0x32315659,1個像素12 bit,8 bit Y 通道平面結束后,是V通道平面,最后是U通道平面;
  • 5. YUV到RGB的轉換

  • 一邊是YUV格式的生產(chǎn)者,一邊是RGB格式的消費者。那如何從YUV轉換到RGB呢?上文已經(jīng)說過,YUV的細分格式有很多種(幾十種),沒有那么多的精力,也沒必要花那個精力一一介紹,因此,這里只給出主流中的主流YUV格式到RGB的轉化。
  • 1. Y’UV420p(和Y’V12或YV12)到RGB888的轉換
  • Y’UV420p是平面格式,這意味著Y’,U和V值組合在一起而不是散布在一起。這樣做的原因是,通過將U和V值分組在一起,圖像變得更加可壓縮。當給定Y’UV420p格式的圖像數(shù)組時,所有Y’值首先出現(xiàn),然后是所有U值,最后是所有V值。

  • Y’V12格式本質上與Y’UV420p相同,但是它切換了U和V數(shù)據(jù):Y’值后跟V值,最后是U值。只要注意從適當?shù)奈恢锰崛和V值,就可以使用相同的算法處理Y’UV420p和Y’V12。

  • 與大多數(shù)Y’UV格式一樣,Y’值與像素一樣多。在X為像素數(shù),則數(shù)組中的前X個元素是對應于每個單獨像素的Y’值。但是,U和V值只有Y的四分之一,這意味著每個U和V元素均適用于四個像素。

  • 如上圖所示,Y’UV420中的Y’,U和V分量分別在順序塊中編碼。為每個像素存儲一個Y’值,而為每個2×2正方形像素塊分別存儲一個U值和一個V值。上圖中使用相同的顏色顯示了相應的Y’,U和V值。從設備逐行讀取字節(jié)流,Y’塊位于位置0,U塊位于x×y(在此示例中為6×4 = 24),V塊位于位置x ×y +(x×y)/ 4(這里6×4 +(6×4)/ 4 = 30)。


  • 3. RGB、YUV像素數(shù)據(jù)處理

    視音頻數(shù)據(jù)處理入門:RGB、YUV像素數(shù)據(jù)處理


    總結

    以上是生活随笔為你收集整理的RGB、YUV像素基础知识及处理数据的全部內容,希望文章能夠幫你解決所遇到的問題。

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