简体   繁体   中英

GDAL Raster Output

I'm trying to create a.tif file using GDAL in python. It's creating a file, but saying "no preview available" whenever I browse to it. Right now, I'm just trying to get it to make a copy of the input file. Here's my 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

============================update========================================= made some discoveries... I've studied ways of converting from one number format to another using statistical normalization. I processed the input data and transformed it to uint8 by using the following algorithm:

 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

the main reason I wanted to copy was to prove that I could read in, then write out updated data based on calculations.

what might be a way I could write out the output data using a color ramp, instead of shades of just one color?

Do you mean you're getting "No preview available" from the Windows Picture and Fax Viewer application when trying to preview the TIFF file as an image? (See below screenshot.)

没有可用的预览截图

Bear in mind that there are many different flavors of TIFF , and not all are the same. In particular, the Windows Picture and Fax Viewer does not support all kinds of TIFFs.

There is a Microsoft Knowledge Base article You Cannot View TIFF Images Using Windows Picture and Fax Viewer that says in part:

Windows Picture and Fax Viewer in Windows XP uses Windows Graphics Device Interface (GDI+). GDI+ supports many standard compression algorithms for faxes. However, it may be incompatible with some of the encoding schemes that are not used frequently.

If you're looking for a tool for viewing raster data (including GeoTIFF rasters), I'd recommend the freely available OpenEV , which you can get as part of the FWTools package.

Couple of things I notice:

  1. You only copy one band of the source dataset. If it is a color image, it may have 3 bands, or a color map. If it has a color map, you need to copy it over as well. If it is 3 or 4 bands, you have to copy all of the data.
  2. CreateCopy() is an easier way to do what you are looking for.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM