這篇“android中YUV的優(yōu)點(diǎn)是什么”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“android中YUV的優(yōu)點(diǎn)是什么”文章吧。
10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有古城免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
在介紹 YUV 格式之前,首先介紹一下我們熟悉的 RGB 格式。
RGB 分別表示紅(R)、綠(G)、藍(lán)(B),也就是三原色,將它們以不同的比例疊加,可以產(chǎn)生不同的顏色。
比如一張 1920 * 1280 的圖片,代表著有 1920 * 1280 個像素點(diǎn)。如果采用 RGB 編碼方式,每個像素點(diǎn)都有紅、綠、藍(lán)三個原色,其中每個原色占用 8 個字節(jié),每個像素占用 24 個字節(jié)。
那么,一張 1920 * 1280 大小的圖片,就占用 1920 * 1280 * 3 / 1024 / 1024 = 7.03MB 存儲空間。
YUV 編碼采用了明亮度和色度表示每個像素的顏色。
其中 Y 表示明亮度(Luminance、Luma),也就是灰階值。
U、V 表示色度(Chrominance 或 Chroma),描述的是色調(diào)和飽和度。
YCbCr 其實(shí)是 YUV 經(jīng)過縮放和偏移的翻版。其中 Y 與 YUV 中的 Y 含義一致,Cb,Cr 同樣都指色彩,只是在表示方法上不同而已。YCbCr 其中 Y 是指亮度分量,Cb 指藍(lán)色色度分量,而 Cr 指紅色色度分量。
對于 YUV 所表示的圖像,Y 和 UV 分量是分離的。如果只有 Y 分量而沒有 UV 分離,那么圖像表示的就是黑白圖像。彩色電視機(jī)采用的就是 YUV 圖像,解決與和黑白電視機(jī)的兼容問題,使黑白電視機(jī)也能接受彩色電視信號。
人眼對色度的敏感程度低于對亮度的敏感程度。主要原因是視網(wǎng)膜桿細(xì)胞多于視網(wǎng)膜錐細(xì)胞,其中視網(wǎng)膜桿細(xì)胞的作用就是識別亮度,視網(wǎng)膜錐細(xì)胞的作用就是識別色度。所以,眼睛對于亮度的分辨要比對顏色的分辨精細(xì)一些。
利用這個原理,可以把色度信息減少一點(diǎn),人眼也無法查覺這一點(diǎn)。
所以,并不是每個像素點(diǎn)都需要包含了 Y、U、V 三個分量,根據(jù)不同的采樣格式,可以每個 Y 分量都對應(yīng)自己的 UV 分量,也可以幾個 Y 分量共用 UV 分量。相比 RGB,能夠節(jié)約不少存儲空間。
YUV 圖像的主流采樣方式有如下三種:
YUV 4:4:4 采樣
YUV 4:2:2 采樣
YUV 4:2:0 采樣
YUV 4:4:4 表示 Y、U、V 三分量采樣率相同,即每個像素的三分量信息完整,都是 8bit,每個像素占用 3 個字節(jié)。
如下圖所示:
四個像素為: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采樣的碼流為:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映射出的像素點(diǎn)為:[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
映射出的像素點(diǎn)為:[Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]
其中,每采樣一個像素點(diǎn),都會采樣其 Y 分量,而 U、V 分量都會間隔采集一個,映射為像素點(diǎn)時,第一個像素點(diǎn)和第二個像素點(diǎn)共用了 U0、V1 分量,以此類推。從而節(jié)省了圖像空間。
比如一張 1920 * 1280 大小的圖片,采用 YUV 4:2:2 采樣時的大小為:
(1920 * 1280 * 8 + 1920 * 1280 * 0.5 * 8 * 2 ) / 8 / 1024 / 1024 = 4.68M
可以看出,比 RGB 節(jié)省了三分之一的存儲空間。
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
映射出的像素點(diǎn)為:
[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]
其中,每采樣一個像素點(diǎn),都會采樣 Y 分量,而 U、V 分量都會隔行按照 2:1 進(jìn)行采樣。
一張 1920 * 1280 大小的圖片,采用 YUV 4:2:0 采樣時的大小為:
(1920 * 1280 * 8 + 1920 * 1280 * 0.25 * 8 * 2 ) / 8 / 1024 / 1024 = 3.51M
相比 RGB,節(jié)省了一半的存儲空間。
YUV 數(shù)據(jù)有兩種存儲格式:平面格式(planar format)和打包格式(packed format)。
planar format:先連續(xù)存儲所有像素點(diǎn)的 Y,緊接著存儲所有像素點(diǎn)的 U,隨后是所有像素點(diǎn)的 V。
packed format:每個像素點(diǎn)的 Y、U、V 是連續(xù)交錯存儲的。
因?yàn)椴煌牟蓸臃绞胶痛鎯Ω袷剑蜁a(chǎn)生多種 YUV 存儲方式,這里只介紹基于 YUV422 和 YUV420 的存儲方式。
YUYV 格式屬于 YUV422,采用打包格式進(jìn)行存儲,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 平面模式進(jìn)行存儲,先存儲所有的 Y 分量,然后存儲所有的 U 分量或者 V 分量。
同樣,YUV420SP 也是基于 planar 平面模式存儲,與 YUV420P 的區(qū)別在于它的 U、V 分量是按照 UV 或者 VU 交替順序進(jìn)行存儲。
YU12 和 YV12 格式都屬于 YUV 420P 類型,即先存儲 Y 分量,再存儲 U、V 分量,區(qū)別在于:YU12 是先 Y 再 U 后 V,而 YV12 是先 Y 再 V 后 U 。
NV12 和 NV21 格式都屬于 YUV420SP 類型。它也是先存儲了 Y 分量,但接下來并不是再存儲所有的 U 或者 V 分量,而是把 UV 分量交替連續(xù)存儲。
NV12 是 IOS 中有的模式,它的存儲順序是先存 Y 分量,再 UV 進(jìn)行交替存儲。
NV21 是 安卓 中有的模式,它的存儲順序是先存 Y 分量,在 VU 交替存儲。
YUV 與 RGB 之間的轉(zhuǎn)換,就是將 圖像所有像素點(diǎn)的 R、G、B 分量和 Y、U、 分量相互轉(zhuǎn)換。
有如下轉(zhuǎn)換公式:
以上就是關(guān)于“android中YUV的優(yōu)點(diǎn)是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。