Hi all,

I’m trying to mask a band from a GeoTiff file like so:

>>> from osgeo import gdal, ogr, osr
>>> from gdalconst import *
>>> import numpy as np
>>> import matplotlib as mpl
>>> dataset = gdal.Open('001.tif')
>>> band = dataset.GetRasterBand(1)
>>> ba = band.ReadAsArray()

>>> print "Origin:", ba[0, 0], type(ba[0, 0])  # NODATA value in image == zero

Origin: 0 <type 'numpy.uint16'>

>>> print "(5, 5):", ba[5, 5], type(ba[5, 5])

(5, 5): 42271 <type 'numpy.uint16'>

>>> print "Nodata:", band.GetNoDataValue()     # NODATA from file == None

Nodata: None

>>> print "Mask flags:", band.GetMaskFlags()

Mask flags: 1


>>> band.SetNoDataValue(0)                     # Set the NODATA value to zero
>>> print "Nodata:", band.GetNoDataValue(), type(band.GetNoDataValue())

Nodata: 0.0 <type 'float’>


>>> mb = band.GetMaskBand()
>>> ma = mb.ReadAsArray()


>>> print "Origin:", ma[0, 0], type(ma[0, 0])  # *** SHOULD BE ZERO!!! ***


Origin: 255 <type 'numpy.uint8'>


>>> print "(5, 5):", ma[5, 5], type(ma[5, 5])  # Correct

(5, 5): 255 <type 'numpy.uint8'>


>>> print np.any(ma==0)                        # Mask band is entirely 255

False

As you can see, the mask covers the entire image and not the zeros on the edge.

The band.GetNoDataValue() is returning a Python float() which leads me to 
suspect that there is incorrect type handling within GDAL’s Python wrapping 
such that the mask generation is trying to compare the band’s raster values 
(GDAL_UInt16) to whatever the NoDataValue type is stored internally.  Am I way 
off base or is there something I’m missing?

Cheers!
______________________________________________
Dave Welch Software Engineer
URTHECAST

111 West Port Plaza Suite 300  l  St. Louis, MO l USA l 63146

urthecast.com<http://www.urthecast.com/>  l  Connect 
@urthecast<https://twitter.com/urthecast>

This e-mail and any attachments are for the use of the intended recipient(s) 
and may contain legally privileged, proprietary and/or confidential information.
Any use or disclosure of this e-mail (including attachments) for any purpose 
other than those specifically authorized is prohibited.
If you are not the intended recipient, please immediately notify the sender and 
permanently delete all copies.

_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to