注:1:相關圖像知識請參考相關網站。推薦:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html
2:本文轉換算法基於:《YUV422到RGB24的轉換算法》 引用地址:http://wenku.baidu.com/link?url=CPytux0pXwjAhmwz6dd3JBsSVSpYXG8Jt07VWNYoZ6ibRJQxVDtOFpqIEGyRv17ZO5DsfBQZl9Kg8WNrJgDveiFccQT581hyzwZzLKKn1-K
RGB24即RGB888,YUV422即YCbCr422。
RGB888碼流格式為:R[7:0] G[7:0] B[7:0]. YCbCr422的碼流格式為:Y0 Cb Y1 Cr.
在轉換的過程中,需要完成兩個步驟:第一步,將RGB24轉換成YUV444,在這個轉換過程中,不會有任何的像素損失。第二步,將YUV444轉換成YUV422,轉換思想為抽取Cb與Cr。這種圖像標准相比於YUV444,損耗像素33.3%。
第一步:RGB24轉換成YUV444,可以依據公式:

轉換以后的圖像即為YUV444。
第二步:YUV444轉YUV422,
對於YUV444來說,一個Y對應一個U和一個V,其中Y U V為一一對應的關系,即由每對RGB轉化而來的。在每一個像素單元,由48bit組成兩個像素,每個像素24bit.
對於YUV422來說,兩個Y對應一個U和一個V,其中Y0 U V為一一對應的關系,即Y0 U V是第一對RGB轉化而來的,而第二對RGB僅僅轉化成Y1。這樣,兩個像素共有32bit.第一個像素點24bit,第二個像素點8bit.
根據YUV444和YUV422的碼流做如下定義:
YUV444碼流: Y0 U0 V0 Y1 U1 V1
YUV422碼流: Y0 U0 Y1 V0
這部分主要做像素抽取,即YUV422不采樣YUV444 U1 V1的數據,所以會損失像素點。
YUV444[i] = YUV422[j]
YUV444[i+1] = YUV422[j+1]
YUV444[i+2] = YUV422[j+3]
YUV444[i+3] = YUV422[j+2]
在YUV422轉YUV444的時候,這部分主要做像素復制,將U0 V0的值復制到U1 V1。
YUV444[i] = YUV422[j]
YUV444[i+1] = YUV422[j+1]
YUV444[i+2] = YUV422[j+3]
YUV444[i+3] = YUV422[j+2]
YUV444[i+4] = YUV422[j+1]
YUV444[i+5] = YUV422[j+3]
所有的轉換,都必須基於相應格式的碼流。
