利用移位避免浮點運算

在視頻編解碼的時候,由於傳輸顯示等不同過程中所採用的數據格式不同,因此我們通常需要在RGB,YUV之間進行相互轉換。看看這些公式,在視頻圖像處理的時候,我們就要進行大量的而且是浮點型的密集運算,隨著用戶對於圖像質量的追求不斷提升,圖像的解析度也越來越大,我們cpu的計算負荷越來越重,效率越來越低下。基於此,小編今天給大家帶來了一個小小的技巧,單獨計算沒有太大優勢,大量併發時還是可以提高效率的哦。


採取移位運算代替浮點運算:

就以計算Y的值為例:

Y = 0.299*R + 0.587*G + 0.114*B,

稍稍變通一下哦:

0.299 = (0.299 * 128) >> 7 = 38.272 >>7

Advertisements

0.587 = (0.587 * 128) >> 7 = 75.136 >>7

0.114 = (0.114 * 128) >> 7 = 14.592 >>7

於是Y = (38*R + 75 * G + 15 * B) >> 7.

如此一來,我們通過移位運算而避免了大量的浮點運算,而如果你懂得使用彙編語言,併發時的效率優化還是值得考慮的哦!怎麼樣,有興趣試試吧!祝你成功哦!

當然這樣處理問題的時候,有可能會對某些顏色值處理時造成一定的溢出,使用還需謹慎一些。

Advertisements

你可能會喜歡