teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追加

2021/12/25 11:07

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -11,4 +11,20 @@
11
11
 
12
12
  img = Image.frombytes('I;16L', Imagesize, data,"raw")
13
13
 
14
- で変換できるはずです。
14
+ で変換できるはずです。
15
+
16
+ OSError: cannot write mode I;16L as TIFF
17
+ とのことですね。なんとなくそうなりそうな気がしてPILでuint16の画像をTIFFでsaveできるかを調べてみたのですが、見つからなかったので前回の回答をしました。
18
+
19
+ cv2でuint16の画像をTIFF形式で保存したものを画像処理ソフトで開いてみたところ、Grayの16ビット画像として開くことができました。
20
+
21
+ したがって、PILのuint16の画像をdtypeがnp.uint16のndarrayに変換できれば保存できるはずです。
22
+
23
+ ```python
24
+ Imagesize=[2592,1922]
25
+ with open(filename +".raw","rb") as f: #2byteのrawデータファイル
26
+ data=f.read()
27
+ img = Image.frombytes('I;16L', Imagesize, data,"raw")
28
+ img_ndarray = np.array(img, dtype=np.uint16)
29
+ cv2.imwrite('test.tiff', img_ndarray)
30
+ ```

1

修正

2021/12/25 11:07

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -1,2 +1,14 @@
1
1
  ぱっと見て気になるのは、```'F;16B'```です。
2
- 16bitリトルエンディアンなら```'F;16L'```でしょう。
2
+ ~~16bitリトルエンディアンなら```'F;16L'```でしょう。~~
3
+ 16bitリトルエンディアンなら```'I;16L'```でしょう。(melianさんのご指摘のとおり)
4
+ 16bitリトルエンディアンということは、モノクロで16ビットの画像ですがそれであっていますか。
5
+
6
+
7
+ [PIL.Image.frombytes(mode, size, data, decoder_name='raw', *args)](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.frombytes)
8
+
9
+ [Modes](https://pillow.readthedocs.io/en/stable/handbook/concepts.html#modes)
10
+ を読み直してみましたが、「16bitリトルエンディアンのモノクロで16ビットのrawデータ」ならば
11
+
12
+ img = Image.frombytes('I;16L', Imagesize, data,"raw")
13
+
14
+ で変換できるはずです。