2

Python で EXR ファイルを読み取るために OpenEXR を使用しています。ハーフ データ (float16) の R、G、および B チャネルがあります。Numpy を使用して、データを float16 から uint8 (0-255 色) に変換しようとしましたが、失敗しました。

        rCh = getChanEXR(imageFile, 'R','HALF')
        rCh = np.array(rCh).astype('uint8')

そこで、R チャネルのピクセル値を変数 rCh に入れます。次に、array.array を np.array に変換して、astype メソッドを使用して uint8 に変換できるようにします。私はこれに慣れていないので、すべての値が 0 になるので、明らかに正しくありません。元々、値は次のようになっています: 0.0、2.9567511226945634e-14、1.2295237050707897e-10 など。

float16 値に加えて、正規化する必要がある通常の float 値もいくつかあります。float16 の値を 0 ~ 255 の範囲に設定する前に正規化する必要があると思います。

何か案は?ありがとうございました。

ここで getChanEXR に記載されている定義のコードを追加します (チャネル データを取得するための python OpenEXR ドキュメントのコードに基づくカスタム定義です。

def getChanEXR(curEXRStr, curChannel, dataType):
    #import OpenEXR, Imath, array
    pt = 'none'
    if dataType == 'HALF':
        pt = Imath.PixelType(Imath.PixelType.HALF)
    if dataType == 'FLOAT':
        pt = Imath.PixelType(Imath.PixelType.FLOAT)
    if dataType == 'UINT':
        pt = Imath.PixelType(Imath.PixelType.UINT)
    chanstr = OpenEXR.InputFile(curEXRStr).channel(curChannel, pt)
    chan = array.array('f', chanstr)
    return chan
4

1 に答える 1