2011-07-15 17 views
6

Estoy tratando de crear un archivo .tif usando GDAL en python. Está creando un archivo, pero diciendo "no hay vista previa disponible" cada vez que lo busco. En este momento, solo intento que haga una copia del archivo de entrada. Aquí está mi código:GDAL Raster Output

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 

actualización ============================ ====== ============================= hizo algunos descubrimientos ... He estudiado formas de convertir de un formato numérico a otro usando la normalización estadística. He procesado los datos de entrada y lo transformó a uint8 utilizando el siguiente algoritmo:

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 

la razón principal que quería copiar era demostrar que podía leer en, a continuación, escriba los datos actualizados sobre la base de cálculos.

¿Cuál podría ser una forma en que podría escribir los datos de salida utilizando una rampa de color, en lugar de tonos de un solo color?

Respuesta

2

¿Quiere decir que obtendrá "No hay vista previa disponible" de la aplicación Visor de imágenes y fax de Windows cuando intente obtener una vista previa del archivo TIFF como una imagen? (Véase más abajo pantalla.)

No preview available screenshot

Tenga en cuenta que hay many different flavors of TIFF, y no todos son lo mismo. En particular, el visor de imágenes y fax de Windows no es compatible con todo tipo de archivos TIFF.

No es un artículo de Microsoft Knowledge Base You Cannot View TIFF Images Using Windows Picture and Fax Viewer que dice en parte:

Visor de imágenes y fax de Windows XP utiliza la interfaz de dispositivo gráfico (GDI +). GDI + admite muchos algoritmos de compresión estándar para faxes. Sin embargo, puede ser incompatible con algunos de los esquemas de codificación que no se usan con frecuencia.

Si usted está buscando una herramienta para ver los datos de mapa de bits (incluyendo raster GeoTIFF), me gustaría recomendar la libre disposición OpenEV, que se puede obtener como parte del paquete de FWTools.

1

par de cosas que notar:

  1. sólo copia una banda del conjunto de datos fuente. Si es una imagen de color , puede tener 3 bandas o un mapa de color. Si tiene un mapa de color, , debe copiarlo también. Si son 3 o 4 bandas, tiene para copiar todos los datos.
  2. CreateCopy() es una manera más fácil de hacer lo que está buscando.
+1

Descubrí mi problema: no tenía un visor adecuado para el tipo de archivo de salida que estaba creando. Int16 no es compatible con productos de microsoft para su visualización. Descargué e instalé Brava Reader, y puedo ver la mayoría de las formas de salida que puedo generar. – Pat