LoginSignup
2
2

More than 3 years have passed since last update.

python で float32 TIFF 画像を読み書きするメモ

Last updated at Posted at 2020-04-22

背景

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 を作るのがよいでしょう.

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2