Поведение, которое вы наблюдаете, зависит от формата файла, в котором вы сохраняете изображение.Немногие форматы изображений имеют спецификацию для значений пикселей с плавающей точкой.Хотя некоторые и делают, в первую очередь, TIFF.
Чтобы продемонстрировать желаемое поведение с помощью программы записи изображений TIFF, рассмотрите следующий сценарий.Он использует универсальную библиотеку ввода / вывода изображений ImageIO , которая использует PILlow в качестве одного из своих внутренних компонентов:
# Use Stack Overflow logo as sample image.
import imageio
logo = 'https://cdn.sstatic.net/Sites/stackoverflow/img/logo.png'
image = imageio.imread(logo)
# Normalize to 1. Pixel values are now floating-point.
image = image / image.max()
# Save as image file and read back in.
format = 'tiff'
imageio.imwrite(f'image.{format}', image)
print(f'wrote: {image.dtype}')
image = imageio.imread(f'image.{format}')
print(f'read: {image.dtype}')
Выходные данные этого сценария:
wrote: float64
read: float64
Если, с другой стороны, вы измените формат на PNG (format = 'png'
в коде), вы получите:
Lossy conversion from float64 to uint8. Range [0, 1].
Convert image to uint8 prior to saving to suppress this warning.
wrote: float64
read: uint8