一、 YUV 與 RGB 之間的轉(zhuǎn)換
YUV 與 RGB 顏色格式之間進(jìn)行轉(zhuǎn)換時(shí) , 涉及一系列的數(shù)學(xué)運(yùn)算 ;
YUV 顏色編碼格式 轉(zhuǎn)為 RGB 格式 的 轉(zhuǎn)換公式 取決于 于 YUV 的具體子采樣格式 :
- YUV444
- YUV422
- YUV420
1、YUV444 顏色編碼格式 轉(zhuǎn)為 RGB 格式
YUV444 格式 轉(zhuǎn)為 RGB 格式 的 轉(zhuǎn)換公式如下 :
- R = Y + 1.13983 * (V - 128)
- G = Y - 0.39465 * (U - 128) - 0.58060 * (V - 128)
- B = Y + 2.03211 * (U - 128)
UV 色度值 分量 減去 128 , 是因?yàn)?這兩個(gè)分量 都是從 中心值 ( 256 / 2 = 128 ) 進(jìn)行偏移的 , 計(jì)算時(shí) 需要 先將這個(gè)偏移量減去 , 然后將其轉(zhuǎn)換到正確的范圍中 ;
上述 計(jì)算 的 顏色 位深度 是 8 bit , 也就是 1 字節(jié) , 取值范圍是 0 ~ 255 , 有 256 個(gè)值 , 128 的偏移量也就是這個(gè)值的中間值 ;
如果計(jì)算出來(lái)的 RGB 分量 小于 0 , 則 取 0 值 ;
如果計(jì)算出來(lái)的 RGB 分量 大于 255 , 則 取 255 ;
如果 YUV 解碼錯(cuò)誤 , 導(dǎo)致 三個(gè)分量的值都是 0 , 則最終計(jì)算時(shí) , 得到如下 3 個(gè) RGB 分量值 ;
R
=
1.402
×
(
?
128
)
=
?
126.598
R = 1.402 \times (-128) = -126.598
R=1.402×(?128)=?126.598
G
=
?
0.34414
×
(
?
128
)
?
0.71414
×
(
?
128
)
=
44.04992
+
91.40992
=
135.45984
G = -0.34414 \times (-128) - 0.71414 \times (-128) = 44.04992 + 91.40992 = 135.45984
G=?0.34414×(?128)?0.71414×(?128)=44.04992+91.40992=135.45984
B
=
1.772
×
(
?
128
)
=
?
126.228
B = 1.772 \times (-128) = -126.228
B=1.772×(?128)=?126.228
計(jì)算出來(lái)的 RGB 分量 小于 0 , 則 取 0 值 , 因此 R 和 B 分量都是 0 , 只有 G 的分量是 135.45984 , 屏幕顯示綠色 ;
2、RGB 顏色編碼格式 轉(zhuǎn)為 YUV444 格式
RGB 格式 轉(zhuǎn)為 YUV444 格式 的 轉(zhuǎn)換公式如下 :
- Y = 0.299 * R + 0.587 * G + 0.114 * B
- U = -0.14713 * R - 0.28886 * G + 0.436 * B + 128
- V = 0.615 * R - 0.51498 * G - 0.10001 * B + 128
UV 分量 在 計(jì)算后 增加一個(gè) 中間值 偏移量 , 這個(gè)中間值一般是 256 的一半 128 , 確保 UV 值在合適范圍之內(nèi) ;
上述 計(jì)算 的 顏色 位深度 是 8 bit , 也就是 1 字節(jié) , 取值范圍是 0 ~ 255 , 有 256 個(gè)值 , 128 的偏移量也就是這個(gè)值的中間值 ;
3、YUV 格式各分量的取值范圍
廣播電視標(biāo)準(zhǔn) : BT601 標(biāo)準(zhǔn) , BT709 標(biāo)準(zhǔn) , BT2020 標(biāo)準(zhǔn) ;
- Y 分量取值范圍 : 16 ~ 235 ;
- UV 分量取值范圍 : 16 ~ 240 ;
在 FFmpeg 中 , 這種范圍稱為 " MPEG 范圍 "
這類標(biāo)準(zhǔn)是 在 電視信號(hào) 中使用的 ;
計(jì)算機(jī)標(biāo)準(zhǔn) : 在 FFmpeg 中, 這種范圍稱為 " JPEG 范圍 " ;
- YUV 分量取值范圍 : 0 ~ 255 ;
這類 標(biāo)準(zhǔn) 是在 計(jì)算機(jī) 中使用的 ;文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-820550.html
4、轉(zhuǎn)換函數(shù)庫(kù)
實(shí)際使用時(shí) , RGB 與 YUV 編碼格式轉(zhuǎn)換 , 都是調(diào)用接口實(shí)現(xiàn) , 如 FFmpeg 的 swscale 庫(kù) , 或者 libyuv 庫(kù) ;文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-820550.html
- FFmpeg 的 swscale 庫(kù) 是用于圖像縮放和像素格式轉(zhuǎn)換的庫(kù) , 該函數(shù)庫(kù) 提供了 高度優(yōu)化的函數(shù) , 用于在不同的像素格式之間進(jìn)行轉(zhuǎn)換 , 以及進(jìn)行圖像的大小調(diào)整 ;
- libyuv 庫(kù) 是 Google 提供的一個(gè)用于處理 YUV 和 RGB 圖像數(shù)據(jù)之間轉(zhuǎn)換的跨平臺(tái)庫(kù) , 該函數(shù)庫(kù) 支持各種 YUV 格式與 RGB 格式之間的相互轉(zhuǎn)換 , 以及圖像的縮放、旋轉(zhuǎn)和裁剪等操作 ;
到了這里,關(guān)于【音視頻原理】圖像相關(guān)概念 ⑥ ( YUV 與 RGB 之間的轉(zhuǎn)換 | YUV444 顏色編碼格式 轉(zhuǎn)為 RGB 格式 | RGB 顏色編碼格式 轉(zhuǎn)為 YUV444 格式 )的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!