pay*_*yne 4 numpy image python-imaging-library python-3.x
这是我目前使用的代码:
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
Run Code Online (Sandbox Code Playgroud)
我希望能够保存包含float值的图像,就像我目前可以保存int有价值的图像一样。
TypeError当我尝试保存已通过 转换的图像时收到一条消息np.divide(img, 255.),因此在尝试保存包含浮点数的 numpy_arrays 时。
(你也可以推荐其他图书馆。)
注意:当不是 0 到 255 之间的整数时,这些值是 0 到 1 之间的浮点数。对我来说,尽可能保持无损是至关重要的。我最初的想法是我可以简单地使用,np.multiply(img, 255)但我不确定这是否会失去一些精度(实际上它也不会返回整数)。
编辑:基本上,这种方法是无损转换吗?也就是说,如果我有一个 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])
Run Code Online (Sandbox Code Playgroud)
文档可在此处获得。
或者,正如@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)
Run Code Online (Sandbox Code Playgroud)
这是一种非常简单的格式,您可以自己编写和阅读,并且具有ImageMagick和GIMP等其他软件包可以理解它的好处,因此您可以将数据保存为PFM文件,然后在命令行中使用ImageMagick将其转换为JPEG或PNG为观看:
magick image.pfm -auto-level result.png
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14792 次 |
| 最近记录: |