背景
python で, 自前などで生成した 32bit TIFF 画像(grayscale, RGB)を読み込みたい.
e.g. C++ で header only で使える DNG/TIFF writer を使って.
2D テンソルデータや HDR 画像を, tiff として保存したい.
方法
How do you read a 32-bit TIFF image in python?
https://stackoverflow.com/questions/40751523/how-do-you-read-a-32-bit-tiff-image-in-python
skimage, imageio, Pillow(PIL), OpenCV あたりで読めます.
これらは, 中身的には tifffile を使っているようです. すくなくとも imageio は tifffile を使っていました.
rawpy でも読めるかもしれません.
imageio(tifffile) あたりで保存できます.
endian で気を付けること
TIFF では, ピクセルデータも適切にエンディアン変換をかけてないといけないことがわかりました.
たとえば x86 で BigEndian で書き出すときは, エンディアン変換して書き出します.
自前で作った tiff で, imageio, cv2 で BigEndian 32bit float TIFF を読むとと, ピクセルの値が swap されて不定な値になって気がつきました.
本来は swap しなくてもいいはずですが, どこか TIFF の仕様で決められているのですかね.
ひとまず, x86 の場合は Little endian で TIFF を作るのがよいでしょう.