2

これは私が取り組んでいるコードの一部です。最後の行を見てください。

def xyz2srgb(xyz):
    """Convert from XYZ colorspace to sRGB"""
    xyz = xyz.T
    srgb = N.zeros_like(xyz)
    srgb[0] = 3.241*xyz[0] - 1.5374*xyz[1] - 0.4986*xyz[2]
    srgb[1] = -0.9692*xyz[0] + 1.876*xyz[1] + 0.0416*xyz[2]
    srgb[2] = 0.0556*xyz[0] - 0.204*xyz[1] + 1.057*xyz[2]

    srgb /= float(srgb.max())

    a = 0.055
    srgb = N.where(srgb <= 0.0031308,
                12.92*srgb,
                (1+a)*srgb**(1/2.4)-a)

エラーがスローされます:

 ./example.py:29: RuntimeWarning: invalid value encountered in power
  (1+a)*srgb**(1/2.4)-a)

これはいくつかの範囲制限ですか?SO で同様のスレッドを見つけました: Numpy error: invalid value occured in power

どんな手掛かり?ありがとう。

4

2 に答える 2

4

の値を出力する必要がありますsrgb。おそらく範囲エラーではなく、負の係数が

srgb[0] = 3.241*xyz[0] - 1.5374*xyz[1] - 0.4986*xyz[2]
srgb[1] = -0.9692*xyz[0] + 1.876*xyz[1] + 0.0416*xyz[2]
srgb[2] = 0.0556*xyz[0] - 0.204*xyz[1] + 1.057*xyz[2]

の要素srgbが負になる可能性を完全に可能にします。既に複素数を扱っていない限り、べき乗を取ると警告が発生します。

>>> import numpy
>>> numpy.array([-2.0])
array([-2.])
>>> numpy.array([-2.0])**(1/2.4)
__main__:1: RuntimeWarning: invalid value encountered in power
array([ nan])
>>> numpy.array([-2.0+0j])**(1/2.4)
array([ 0.34548198+1.28935629j])

への引数は渡される前に評価されるため、条件の分岐が値を分割する where前にベキが取得され、警告がトリガーされます。srgb <= 0.0031308

于 2012-05-14T11:29:25.037 に答える