GDAL Raster Output - PullRequest
       28

GDAL Raster Output

7 голосов
/ 15 июля 2011

Я пытаюсь создать файл .tif, используя GDAL в python.Он создает файл, но говорит, что нет предварительного просмотра всякий раз, когда я просматриваю его.Прямо сейчас я просто пытаюсь заставить его сделать копию входного файла.Вот мой код:

</p>

<pre><code>gdal.AllRegister()

inDs = gdal.Open("C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\color_a2.tif")
if inDs is None:
  print 'Could not open image file'
  sys.exit(1)
else:
    print "successfully opened input file"

rows = inDs.RasterYSize
cols = inDs.RasterXSize
myband = inDs.GetRasterBand(1)
elev_data = myband.ReadAsArray(0,0,cols,rows)
driver = inDs.GetDriver()
outDs = driver.Create('C:\\Documents and Settings\\patrick\\Desktop\\tiff elevation\\EBK1KM\\new.tif', cols, rows, 1, GDT_Int32)

if outDs is None:
    print "couldn't open output file"
    sys.exit(1)

outBand = outDs.GetRasterBand(1)
outData = numpy.zeros((rows,cols),numpy.int16)
outBand.WriteArray(elev_data)
outBand.FlushCache()
outBand.SetNoDataValue(-99)
outDs.SetGeoTransform(inDs.GetGeoTransform())
outDs.SetProjection(inDs.GetProjection())
del outData

===========================обновление =============================================== сделал некоторые открытия ... Я 'Мы изучили способы преобразования из одного числового формата в другой с использованием статистической нормализации.Я обработал входные данные и преобразовал их в uint8, используя следующий алгоритм:

std = elev_data.std() #standard dev
avg = elev_data.mean()
arr = numpy.zeros((rows,cols),numpy.uint8)
for _i_ in _range_(_rows_):
    for _j_ in _range_(_cols_):
        arr[i,j] = (((out_elev[i,j]-avg)/std)*127)+128 #normalization formula
        #this puts all vals in range 1 to 255 (uint8)
dr = gdal.GetDriverByName("GTiff")
outDs = dr.Create("name",cols,rows,3,GDT_Byte) 
#creates and RGB file, accepts uint8 for input
outDs.GetRasterBand(1).WriteArray(arr) #write the output as shades of red
#this writes out a format viewable by microsoft products

. Основная причина, по которой я хотел скопировать, - доказать, что я могу читать, а затем выписать обновленные данные на основе вычислений.

Каким образом я мог бы записать выходные данные, используя цветовую шкалу вместо оттенков одного цвета?

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Вы имеете в виду, что вы получаете «Нет предварительного просмотра» из приложения Windows для просмотра изображений и факсов при попытке предварительного просмотра файла TIFF в виде изображения?(См. Скриншот ниже.)

No preview available screenshot

Имейте в виду, что существует много разных вкусов TIFF , и не все они одинаковы.В частности, средство просмотра изображений и факсов Windows не поддерживает все типы файлов TIFF.

Существует статья базы знаний Майкрософт Вы не можете просматривать изображения TIFF с помощью средства просмотра изображений и факсов Windows , в котором говорится:

Средство просмотра изображений и факсов Windows в Windows XP использует интерфейс графических устройств Windows (GDI +).GDI + поддерживает множество стандартных алгоритмов сжатия для факсов.Однако это может быть несовместимо с некоторыми схемами кодирования, которые используются не часто.

Если вы ищете инструмент для просмотра растровых данных (включая растры GeoTIFF), я бы порекомендовалсвободно доступны OpenEV , который вы можете получить как часть пакета FWTools .

1 голос
/ 29 июля 2011

Я заметил пару вещей:

  1. Вы копируете только одну полосу исходного набора данных. Если это цвет изображение, оно может иметь 3 полосы или карту цветов. Если у него есть цветная карта, Вы должны скопировать это также. Если это 3 или 4 группы, у вас есть скопировать все данные.
  2. CreateCopy() - это более простой способ сделать то, что вы ищете.
...