3

I have a performed band calculation to calculate the NDVI grayscale. It has float based values on a single band, between 0.0 and 1.0 respectively. I am attempting to colorize the single band via applying a ColorRamp, with my end goal being able to generate a colored Tif that doesn't require mapping software to visualize the colors. I believe the method approach I need to take is to apply a color ramp; however, it appears the ColorRamp only accepts integer values for the ranges though. The documentation for the method states this:

int GDALColorTable::CreateColorRamp (int nStartIndex, const GDALColorEntry * psStartColor, int nEndIndex, const GDALColorEntry * psEndColor)

How do I apply the ColorRamp using the float based values?

Here is what I have attempted thus far:

colors = gdal.ColorTable()
colors.CreateColorRamp(0.0, (82,44,15), 0.25, (255,128,44))
colors.CreateColorRamp(0.25, (255,128,44), 0.5, (255,255,61))
colors.CreateColorRamp(0.5, (255,255,61), 0.75, (0,255,52))
colors.CreateColorRamp(0.75, (0,255,52), 1.0, (0,53,12))

ds = gdal.Open(f"{path}NDVI.tif", gdal.gdalconst.GA_Update)
band = ds.GetRasterBand(1)
band.SetRasterColorTable(colors)
band.SetRasterColorInterpretation(gdal.GCI_PaletteIndex)

Do I need to perform a gdal.Translate to get the source image from float to 0-255 range?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.