2013-10-18 27 views
5

RGB画像をYCbCr色空間に変換する必要がありますが、色のシフトに問題があります。すべての式を使用して同じ結果が得られます。パイソンRGB to YCbCr変換の問題

cbcr[0] = int(0.299*rgb[0] + 0.587*rgb[1] + 0.114*rgb[2]) #Y 
    cbcr[1] = int(-0.1687*rgb[0] - 0.3313*rgb[1] + 0.5*rgb[2] + 128) #Cb 
    cbcr[2] = int(0.5*rgb[0] - 0.4187*rgb[1] - 0.0813*rgb[2] + 128) #Cr 

式は、私は私がデータを記録する別の方法で同じ画像を取得する必要があることを知っているが、私は間違った色の結果を得ました。

http://i.imgur.com/zHuv8yq.pngオリジナル

http://i.imgur.com/Ek2WEA1.png結果

だから、どのように私は、通常の画像を得ることができるか、RGB PNGは、YCbCrの4に変換:2:2?

+0

[OK]を、私は、新しい質問を持っている(約)動作するはずです。どうやってYUVパレットで画像を保存できますか?私はYUVの色の値を持っていますが、画像を保存またはマージしようとすると、色がYCbCrではなくRGBのパレットから来て色が変わってしまいます。 – Runnko

答えて

5

これは

def _ycc(r, g, b): # in (0,255) range 
    y = .299*r + .587*g + .114*b 
    cb = 128 -.168736*r -.331364*g + .5*b 
    cr = 128 +.5*r - .418688*g - .081312*b 
    return y, cb, cr 

def _rgb(y, cb, cr): 
    r = y + 1.402 * (cr-128) 
    g = y - .34414 * (cb-128) - .71414 * (cr-128) 
    b = y + 1.772 * (cb-128) 
    return r, g, b 

>>> c = _ycc(10, 20, 30) 
>>> _rgb(*c) 
(10.000005760000002, 20.000681726399996, 29.996457920000005) 

See also Wikipedia