web-dev-qa-db-ja.com

「float」の派手な画像を保存する

これが私が現在使用しているコードです:

_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に再変換すると、情報が失われますか?もしそうなら、それを避ける方法は?

4
payne

ライブラリを必要とせずに、フロートの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ファイルとして保存し、コマンドラインでImageMagickJPEGまたはPNGに表示:

magick image.pfm -auto-level result.png
3
Mark Setchell