Как создать необработанный файл из многополосного файла tif?

Я пытаюсь открыть изображение в формате tif с 16 битами на пиксель и многополосным, чтобы преобразовать его в необработанный файл. Я использую PIL со следующими командами i = Image.open('image.tif') и после того, как использую rawData = i.tostring(). Это не работает с многоканальным изображением tif.

Ошибка:

File "C:\Python27\lib\site-packages\PIL\Image.py", line 1980, in open
    raise IOError("cannot identify image file")
IOError: cannot identify image file

Каталог содержит файл .

Как я должен это сделать?


person j.barrio    schedule 05.09.2012    source источник
comment
Ваш файл TIFF должен использовать формат, который PIL не распознает. Убедитесь, что он подпадает под поддерживаемые критерии.   -  person Martijn Pieters    schedule 05.09.2012
comment
И нет другой библиотеки, такой как Gdal, для этого?   -  person j.barrio    schedule 05.09.2012
comment
Также спасибо за ответ. :D   -  person j.barrio    schedule 05.09.2012
comment
PIL не поддерживает 16 бит на пиксель, см. Концепции.   -  person martineau    schedule 05.09.2012
comment
Да, но я могу открыть 16-битный tif-образ с одной полосой. Однако многополосных изображений нет.   -  person j.barrio    schedule 05.09.2012


Ответы (1)


GDAL довольно хорошо открывает многоканальные растры и поддерживает 11 различных типов каналов, включая int16.

from osgeo import gdal
import numpy as np

ds = gdal.Open('image.tif')

# loop through each band
for bi in range(ds.RasterCount):
    band = ds.GetRasterBand(bi + 1)
    # Read this band into a 2D NumPy array
    ar = band.ReadAsArray()
    print('Band %d has type %s'%(bi + 1, ar.dtype))
    raw = ar.tostring()
person Mike T    schedule 16.09.2012