回答編集履歴

2

d

2019/02/25 08:07

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -48,6 +48,8 @@
48
48
 
49
49
  データに変更を加えたくない場合はこちらの方法をとってください。
50
50
 
51
+ 一般的な画像ビューアーは対応してないかもしれないので、対応しているビューアー [DJV Imaging](http://djv.sourceforge.net/) を使えば見れます。
52
+
51
53
 
52
54
 
53
55
  ```python

1

d

2019/02/25 08:07

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -1,3 +1,7 @@
1
+ ## png, jpg などの形式で保存する場合
2
+
3
+
4
+
1
5
  float 画像は imshow() ではそのまま表示できますが、そのままの型では保存できないので、範囲を [0, 1] から [0, 255] に直した後、np.uint8 にキャストしてから保存してください。
2
6
 
3
7
 
@@ -33,3 +37,51 @@
33
37
  cv2.imwrite('img.png', img)
34
38
 
35
39
  ```
40
+
41
+
42
+
43
+ ## 元の数値データの情報を変更しないで保存したい場合
44
+
45
+
46
+
47
+ OpenEXR 形式であれば、float 型のまま保存できます。
48
+
49
+ データに変更を加えたくない場合はこちらの方法をとってください。
50
+
51
+
52
+
53
+ ```python
54
+
55
+ import cv2
56
+
57
+ import numpy as np
58
+
59
+
60
+
61
+ # テスト用の float 画像を作成
62
+
63
+ img = np.tile(np.linspace(0, 1, 100), (100, 1)).astype(np.float32)
64
+
65
+ print(img.shape, img.dtype) # (100, 100) float64
66
+
67
+
68
+
69
+ # imwrite
70
+
71
+ cv2.imwrite('img.exr', img)
72
+
73
+
74
+
75
+ # imread cv2.IMREAD_UNCHANGED を指定
76
+
77
+ img2 = cv2.imread('img.exr', cv2.IMREAD_UNCHANGED)
78
+
79
+
80
+
81
+ # データが同じかどうか
82
+
83
+ print(np.allclose(img, img2)) # True
84
+
85
+
86
+
87
+ ```