回答編集履歴

1

追記

2018/05/21 10:34

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -7,3 +7,47 @@
7
7
 
8
8
 
9
9
  難航するようであれば、一枚画像のサンプルを頂けると回答する側もデバッグできます。もしTIFFがteratailにそのままアップロードできなければ、アップローダか何かに上げていただければ。
10
+
11
+
12
+
13
+ ### 追記
14
+
15
+ 案の定`np.fromfile`は読めてませんでした(滅茶苦茶な次元数のnumpy配列になってた。逆によくエラーも吐かず読み込むものです)。
16
+
17
+
18
+
19
+ とりあえず、意図している(であろう)変換をするコードを書いてみたので、参考にしてください。
20
+
21
+
22
+
23
+ ```python
24
+
25
+ import numpy as np
26
+
27
+ import matplotlib.cm as cm
28
+
29
+ from matplotlib.colors import Normalize
30
+
31
+ from PIL import Image
32
+
33
+
34
+
35
+ pil_img = Image.open("img.tif") # PIL.Imageで読む。ファイル名は変えました
36
+
37
+ img_array = np.asarray(pil_img) # arrayに変換
38
+
39
+
40
+
41
+ norm = Normalize(vmin=0, vmax=6) # matplotlibのnormは使う。参照:https://matplotlib.org/users/colormapnorms.html
42
+
43
+ img_converted = cm.Paired(norm(img_array))*255 # matplotlibのcm.Pairedは使う。値のスケールが0~1なので0~255に変換
44
+
45
+ out_img = Image.fromarray(np.uint8(img_converted)) # ここでplt.imshow使うのもなんなのでそのままPIL.Imageで処理することにした
46
+
47
+ out_img.save("out_img.png") # 出力
48
+
49
+ ```
50
+
51
+
52
+
53
+ ![結果](518aef267ffe63fc95165dba57af8342.png)