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