2012-09-05 2 views
1

픽셀 당 16 비트 및 다중 밴드로 tif 이미지를 열어 원시 파일로 변환 해 봅니다. 나는 i = Image.open('image.tif') 명령으로 PIL을 사용하고 rawData = i.tostring()을 사용한 후에 사용합니다. 멀티 밴드 TIF 이미지에서는 작동하지 않습니다.어떻게 다중 대역 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 

디렉토리의 파일이 포함되어 있습니다.

어떻게해야합니까?

+2

TIFF 파일은 PIL이 인식하지 못하는 형식을 사용해야합니다. 지원되는 기준에 맞는지 확인하십시오 (http://www.pythonware.com/library/pil/handbook/format-tiff.htm). –

+0

그리고 Gdal과 같은 다른 도서관이 없으니까요? –

+0

죄송합니다, 저는 몰라요. –

답변

2

GDAL은 멀티 밴드 래스터를 열어도 꽤 좋으며 int16을 포함하여 11 different band types을 지원합니다.

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()