Как правило, когда вы хотите читать или писать изображения на Python - любой битовой глубины и формата - лучше всего использовать ImageIO .Как следует из названия, единственной целью является ввод / вывод изображений.
Вы могли бы прочитать на изображении, скажем, example.tif
, например, так:
import imageio
image = imageio.imread('example.tif')
Что касается преобразования,это просто базовая математика.Структура данных, в которой вы будете получать данные пикселей, представляет собой массив Numpy .Самоанализ image.shape
и image.dtype
.Вы должны ожидать, что ваши изображения будут иметь shape
из (y, x, 3)
, где y
- это количество пикселей по вертикали, x
- по горизонтали, а 3
- три цветовых канала: красный, зеленый.синий.Его dtype
(тип данных) должен быть uint16
, что означает 16-разрядные целые числа без знака.
16-разрядные целые числа в диапазоне от 0 до 65535 (2 16 -1).Вам нужно привести этот диапазон к 8-битному: от 0 до 255 (2 8 -1).
image = image / 2**8
Это (как правило) даст вам массив с плавающей точкойзначения пикселей.Его тип данных должен быть явно приведен к 8-битному целому числу, чтобы отбрасывать любые дроби.
image = image.astype(numpy.uint8)
Затем либо используйте этот image
для дальнейшей обработки, либо сохраните его в (новом) файле:
imageio.imwrite('example.png', image)