您好,登錄后才能下訂單哦!
這篇“android中YUV的優點是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“android中YUV的優點是什么”文章吧。
在介紹 YUV 格式之前,首先介紹一下我們熟悉的 RGB 格式。
RGB 分別表示紅(R)、綠(G)、藍(B),也就是三原色,將它們以不同的比例疊加,可以產生不同的顏色。
比如一張 1920 * 1280 的圖片,代表著有 1920 * 1280 個像素點。如果采用 RGB 編碼方式,每個像素點都有紅、綠、藍三個原色,其中每個原色占用 8 個字節,每個像素占用 24 個字節。
那么,一張 1920 * 1280 大小的圖片,就占用 1920 * 1280 * 3 / 1024 / 1024 = 7.03MB 存儲空間。
YUV 編碼采用了明亮度和色度表示每個像素的顏色。
其中 Y 表示明亮度(Luminance、Luma),也就是灰階值。
U、V 表示色度(Chrominance 或 Chroma),描述的是色調和飽和度。
YCbCr 其實是 YUV 經過縮放和偏移的翻版。其中 Y 與 YUV 中的 Y 含義一致,Cb,Cr 同樣都指色彩,只是在表示方法上不同而已。YCbCr 其中 Y 是指亮度分量,Cb 指藍色色度分量,而 Cr 指紅色色度分量。
對于 YUV 所表示的圖像,Y 和 UV 分量是分離的。如果只有 Y 分量而沒有 UV 分離,那么圖像表示的就是黑白圖像。彩色電視機采用的就是 YUV 圖像,解決與和黑白電視機的兼容問題,使黑白電視機也能接受彩色電視信號。
人眼對色度的敏感程度低于對亮度的敏感程度。主要原因是視網膜桿細胞多于視網膜錐細胞,其中視網膜桿細胞的作用就是識別亮度,視網膜錐細胞的作用就是識別色度。所以,眼睛對于亮度的分辨要比對顏色的分辨精細一些。
利用這個原理,可以把色度信息減少一點,人眼也無法查覺這一點。
所以,并不是每個像素點都需要包含了 Y、U、V 三個分量,根據不同的采樣格式,可以每個 Y 分量都對應自己的 UV 分量,也可以幾個 Y 分量共用 UV 分量。相比 RGB,能夠節約不少存儲空間。
YUV 圖像的主流采樣方式有如下三種:
YUV 4:4:4 采樣
YUV 4:2:2 采樣
YUV 4:2:0 采樣
YUV 4:4:4 表示 Y、U、V 三分量采樣率相同,即每個像素的三分量信息完整,都是 8bit,每個像素占用 3 個字節。
如下圖所示:
四個像素為: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采樣的碼流為:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映射出的像素點為:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
可以看到這種采樣方式與 RGB 圖像大小是一樣的。
YUV 4:2:2 表示 UV 分量的采樣率是 Y 分量的一半。
如下圖所示:
四個像素為: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采樣的碼流為:Y0 U0 Y1 V1 Y2 U2 Y3 U3
映射出的像素點為:[Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]
其中,每采樣一個像素點,都會采樣其 Y 分量,而 U、V 分量都會間隔采集一個,映射為像素點時,第一個像素點和第二個像素點共用了 U0、V1 分量,以此類推。從而節省了圖像空間。
比如一張 1920 * 1280 大小的圖片,采用 YUV 4:2:2 采樣時的大小為:
(1920 * 1280 * 8 + 1920 * 1280 * 0.5 * 8 * 2 ) / 8 / 1024 / 1024 = 4.68M
可以看出,比 RGB 節省了三分之一的存儲空間。
YUV 4:2:0 并不意味著不采樣 V 分量。它指的是對每條掃描線來說,只有一種色度分量以 2:1 的采樣率存儲,相鄰的掃描行存儲不同的色度分量。也就是說,如果第一行是 4:2:0,下一行就是 4:0:2,在下一行就是 4:2:0,以此類推。
如下圖所示:
圖像像素為:
[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3]
[Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 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]、[Y7 U2 V7]、[Y8 U2 V7]
其中,每采樣一個像素點,都會采樣 Y 分量,而 U、V 分量都會隔行按照 2:1 進行采樣。
一張 1920 * 1280 大小的圖片,采用 YUV 4:2:0 采樣時的大小為:
(1920 * 1280 * 8 + 1920 * 1280 * 0.25 * 8 * 2 ) / 8 / 1024 / 1024 = 3.51M
相比 RGB,節省了一半的存儲空間。
YUV 數據有兩種存儲格式:平面格式(planar format)和打包格式(packed format)。
planar format:先連續存儲所有像素點的 Y,緊接著存儲所有像素點的 U,隨后是所有像素點的 V。
packed format:每個像素點的 Y、U、V 是連續交錯存儲的。
因為不同的采樣方式和存儲格式,就會產生多種 YUV 存儲方式,這里只介紹基于 YUV422 和 YUV420 的存儲方式。
YUYV 格式屬于 YUV422,采用打包格式進行存儲,Y 和 UV 分量按照 2:1 比例采樣,每個像素都采集 Y 分量,每隔一個像素采集它的 UV 分量。
Y0 U0 Y1 V0 Y2 U2 Y3 V2
Y0 和 Y1 共用 U0 V0 分量,Y2 和 Y3 共用 U2 V2 分量。
UYVY 也是 YUV422 采樣的存儲格式中的一種,只不過與 YUYV 排列順序相反。
U0 Y0 V0 Y1 U2 Y2 V2 Y3
YUV422P 屬于 YUV422 的一種,它是一種 planer 模式,即 Y、U、V 分別存儲。
YUV420P 是基于 planar 平面模式進行存儲,先存儲所有的 Y 分量,然后存儲所有的 U 分量或者 V 分量。
同樣,YUV420SP 也是基于 planar 平面模式存儲,與 YUV420P 的區別在于它的 U、V 分量是按照 UV 或者 VU 交替順序進行存儲。
YU12 和 YV12 格式都屬于 YUV 420P 類型,即先存儲 Y 分量,再存儲 U、V 分量,區別在于:YU12 是先 Y 再 U 后 V,而 YV12 是先 Y 再 V 后 U 。
NV12 和 NV21 格式都屬于 YUV420SP 類型。它也是先存儲了 Y 分量,但接下來并不是再存儲所有的 U 或者 V 分量,而是把 UV 分量交替連續存儲。
NV12 是 IOS 中有的模式,它的存儲順序是先存 Y 分量,再 UV 進行交替存儲。
NV21 是 安卓 中有的模式,它的存儲順序是先存 Y 分量,在 VU 交替存儲。
YUV 與 RGB 之間的轉換,就是將 圖像所有像素點的 R、G、B 分量和 Y、U、 分量相互轉換。
有如下轉換公式:
以上就是關于“android中YUV的優點是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。