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

回答編集履歴

2

d

2019/02/25 08:07

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -23,6 +23,7 @@
23
23
 
24
24
  OpenEXR 形式であれば、float 型のまま保存できます。
25
25
  データに変更を加えたくない場合はこちらの方法をとってください。
26
+ 一般的な画像ビューアーは対応してないかもしれないので、対応しているビューアー [DJV Imaging](http://djv.sourceforge.net/) を使えば見れます。
26
27
 
27
28
  ```python
28
29
  import cv2

1

d

2019/02/25 08:07

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,3 +1,5 @@
1
+ ## png, jpg などの形式で保存する場合
2
+
1
3
  float 画像は imshow() ではそのまま表示できますが、そのままの型では保存できないので、範囲を [0, 1] から [0, 255] に直した後、np.uint8 にキャストしてから保存してください。
2
4
 
3
5
  ```python
@@ -15,4 +17,28 @@
15
17
  # imwrite
16
18
  img = np.clip(img * 255, 0, 255).astype(np.uint8)
17
19
  cv2.imwrite('img.png', img)
20
+ ```
21
+
22
+ ## 元の数値データの情報を変更しないで保存したい場合
23
+
24
+ OpenEXR 形式であれば、float 型のまま保存できます。
25
+ データに変更を加えたくない場合はこちらの方法をとってください。
26
+
27
+ ```python
28
+ import cv2
29
+ import numpy as np
30
+
31
+ # テスト用の float 画像を作成
32
+ img = np.tile(np.linspace(0, 1, 100), (100, 1)).astype(np.float32)
33
+ print(img.shape, img.dtype) # (100, 100) float64
34
+
35
+ # imwrite
36
+ cv2.imwrite('img.exr', img)
37
+
38
+ # imread cv2.IMREAD_UNCHANGED を指定
39
+ img2 = cv2.imread('img.exr', cv2.IMREAD_UNCHANGED)
40
+
41
+ # データが同じかどうか
42
+ print(np.allclose(img, img2)) # True
43
+
18
44
  ```