これが私が現在使用しているコードです:
_from PIL import Image
import numpy as np
def save_np_img(np_img, path, name):
"""
To save the image.
:param np_img: numpy_array type image
:param path: string type of the existing path where to save the image
:param name: string type that includes the format (ex:"bob.png")
:return: numpy array
"""
assert isinstance(path, str), 'Path of wrong type! (Must be String)'
assert isinstance(name, str), 'Name of wrong type! (Must be String)'
im = Image.fromarray(np_img)
im.save(path + name)
return np_img
_
現在float
値のある画像を保存できるように、int
値を含む画像を保存できるようにしたいと思います。
np.divide(img, 255.)
で変換された画像を保存しようとすると、TypeError
メッセージが表示されます。つまり、floatを含むnumpy_arraysを保存しようとすると、.
(他のライブラリーも提案できます。)
注:値は、0から255までの整数でない場合、0から1までの浮動小数点数です。できるだけロスレスにすることが重要です。私の最初の考えは、単にnp.multiply(img, 255)
を使用できるということでしたが、それがある程度の精度を失うかどうか(実際には整数を返すかどうか)はわかりませんでした。
EDIT:基本的に、 this メソッドはロスレス変換ですか?つまり、numpy_arrayがints
であり、それを_255.
_で除算してからints
に再変換すると、情報が失われますか?もしそうなら、それを避ける方法は?
ライブラリを必要とせずに、フロートのnumpy
配列をロスレスでネイティブに保存して読み戻すことができます。
import numpy as np
# Create 10 random floats in range 0..1 in array "b"
b = np.random.random_sample((10,)).astype(np.float32)
# Save to file
np.save('BunchOfFloats.npy',b)
# Read back into different array "r"
r = np.load('BunchOfFloats.npy')
# Inspect b
array([0.26565347, 0.7193414 , 0.19435954, 0.58980538, 0.28096624,
0.88655137, 0.84847042, 0.80156026, 0.94315194, 0.76888901])
# Inspect r
array([0.26565347, 0.7193414 , 0.19435954, 0.58980538, 0.28096624,
0.88655137, 0.84847042, 0.80156026, 0.94315194, 0.76888901])
ドキュメントは入手可能です ここ 。
あるいは、@ WarrenWekesserのコメントで提案されているように、浮動小数点数や倍精度数も格納できるTIFFファイルを使用できます。
import numpy as np
from tifffile import imsave
# Generate float data
b=np.random.random_sample((768,1024,3)).astype(np.float32)
# Save as TIF - when reading, use "data = imread('file.tif')"
imsave('result.tif',b)
さらに別のオプションはPFM
ファイルで、 ここ と ここ と記述されています。
これは非常に単純な形式であり、自分で読み書きすることができ、ImageMagickやなどの他のパッケージよりも優れています。 =)[〜#〜] gimp [〜#〜]理解して、データをPFM
ファイルとして保存し、コマンドラインでImageMagickをJPEG
またはPNG
に表示:
magick image.pfm -auto-level result.png