Наткнулся на этот поток, пытаясь сохранить 16-битные изображения TIFF с помощью PIL / numpy.
Версии: python 2.7.1 - numpy 1.6.1 - PIL 1.1.7
Вот быстрыйтест я написал.uint16 массив numpy -> преобразованный в строку -> преобразованный в изображение PIL типа 'I; 16' -> сохраненный как 16-битный TIFF.
При открытии изображения в ImageJ отображается правый шаблон горизонтального градиента итип изображения: «Биты на пиксель: 16 (без знака)»
import Image
import numpy
data = numpy.zeros((1024,1024),numpy.uint16)
h,w = data.shape
for i in range(h):
data[i,:] = numpy.arange(w)
im = Image.fromstring('I;16',(w,h),data.tostring())
im.save('test_16bit.tif')
edit: Начиная с версии 1.1.7, PIL не поддерживает запись сжатых файлов, но pylibtiff делает (сжатие lzw).Таким образом, тестовый код становится (протестирован с pylibtiff 0.3):
import Image
import numpy
from libtiff import TIFFimage
data = numpy.zeros((1024,1024),numpy.uint16)
h,w = data.shape
for i in range(w):
data[:,i] = numpy.arange(h)
tiff = TIFFimage(data, description='')
tiff.write_file('test_16bit.tif', compression='lzw')
#flush the file to disk:
del tiff
Обратите внимание: тестовый код изменен для генерации вертикального градиента, в противном случае сжатие не выполняется (см. Предупреждение: pylibtiff в настоящее время поддерживает чтение и запись изображений,хранятся с использованием полос TIFF).