回答編集履歴

2

追加

2021/12/25 11:07

投稿

ppaul
ppaul

スコア24670

test CHANGED
@@ -25,3 +25,35 @@
25
25
 
26
26
 
27
27
  で変換できるはずです。
28
+
29
+
30
+
31
+ OSError: cannot write mode I;16L as TIFF
32
+
33
+ とのことですね。なんとなくそうなりそうな気がしてPILでuint16の画像をTIFFでsaveできるかを調べてみたのですが、見つからなかったので前回の回答をしました。
34
+
35
+
36
+
37
+ cv2でuint16の画像をTIFF形式で保存したものを画像処理ソフトで開いてみたところ、Grayの16ビット画像として開くことができました。
38
+
39
+
40
+
41
+ したがって、PILのuint16の画像をdtypeがnp.uint16のndarrayに変換できれば保存できるはずです。
42
+
43
+
44
+
45
+ ```python
46
+
47
+ Imagesize=[2592,1922]
48
+
49
+ with open(filename +".raw","rb") as f: #2byteのrawデータファイル
50
+
51
+ data=f.read()
52
+
53
+ img = Image.frombytes('I;16L', Imagesize, data,"raw")
54
+
55
+ img_ndarray = np.array(img, dtype=np.uint16)
56
+
57
+ cv2.imwrite('test.tiff', img_ndarray)
58
+
59
+ ```

1

修正

2021/12/25 11:07

投稿

ppaul
ppaul

スコア24670

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