15

私はPythonのcolorsysライブラリを使用してRGBカラー値をHLSに変換しています。確認のために、RGBに変換して戻したところ、別の値が返されました。精度の問題で小さな違いは理解できますが、これらの値は大きく異なります。

これが私のコードです:

import colorsys
r=192
g=64
b=1

hlsval = colorsys.rgb_to_hls(r,g,b)
rgbval=colorsys.hls_to_rgb(hlsval[0],hlsval[1],hlsval[2])

print hlsval, rgbval

出力:

(0.16666666666666666, 96.5, -1.0) (191.99999999999994, 192.0, 1.0)

緑の値は200%以上ずれています

他の値を試してみましたが、コンポーネントの1つが大幅にオフになるたびに。私は何かが足りないのですか?

4

1 に答える 1

32

あなたの価値観は、色空間の境界をはるかに超えています。

ドキュメントから:

これらすべての色空間の座標は浮動小数点値です。YIQ空間では、Y座標は0から1の間ですが、I座標とQ座標は正または負になります。他のすべてのスペースでは、座標はすべて0から1の間です。

あなたはそれらが0から255の間のバイト値であることを期待していると思いますか?最初に255で割るだけです。

r, g, b = 192, 64, 1
r, g, b = [x/255.0 for x in r, g, b]
h, l, s = colorsys.rgb_to_hls(r, g, b)
r, g, b = colorsys.hls_to_rgb(h, l, s)
r, g, b = [x*255.0 for x in r, g, b]
print r, g, b

これはあなたに与えるでしょう:

192.0 64.0 1.0

色空間の境界をはるかに超えたときに、なぜこのようなばかげたエラーが発生するのかを理解したい場合。

まず、ドキュメントからリンクされている2つのドキュメントを読んで、色空間外の値が無意味である理由と、不可能な制約に対して値を生成するように要求している理由を理解します。次に、他の方法ではなく、失敗する理由を正確に把握するために、使用しているアルゴリズムを知る必要があります。これは、ドキュメントが純粋なPythonで非常に読みやすいソースコードにリンクしているため、非常に簡単です。 。

(PS、9650%の明度がどのように見えるか想像できますが、-100%の飽和度に興味があります。おそらくラブクラフティアンです。)

于 2013-03-15T21:32:14.857 に答える