# How to conditionnally assign a new value to pixels of a raster image?

Given a topographic GIS raster of one country `crop.tif`:

Given a know pixel value such as elevation (z) is +73 :

``````\$ gdallocationinfo crop.tif 1 1 -valonly
> 73
``````

Given an elevation threshold n = 50 (meters)

How to set the value of all/this pixels where z >= n to 50 ?

The solution should be with gdal or in console.

EDIT: I eventually used the formula `--calc="50*(A>50)" --NoDataValue=0` standing for `"new calc where value set as 50 when value in input A > 50, else value set as 0"`

gdal_calc.py -A input.tif --outfile=result.tif --calc="50*(A>50)" --NoDataValue=0

-

The best all round tool here is a raster calculator.

gdal_calc is a GDAL raster calculator implemented in Python here, with some examples here.

If you e.g. wants to keep values above +50:

``````gdal_calc.py -A input.tif --outfile=result.tif --calc="A*(A>50)" --NoDataValue=0
``````

You can specify several files -A to -Z, where each of them get a corresponding variable in the expression.

In this case, the boolean expression (A>50) returns either 1 or 0, and is then multiplied with A. The result is then stored in the corresponding pixel in outputfile.

Not sure if you need a programmatic approach or a manual one, but QGis has a raster calculator. See related question with answer here.

-
+1 untill test for validation. I was looking for a programmatic approach, but others may be interested by the manual one. :) – Hugolpz Aug 20 '13 at 3:19
Note: I need to polygonize afterward. So I need to set values >= 50 to 50 (one same value). – Hugolpz Aug 20 '13 at 3:35
Ok ! new calc is equal to 50 when -A>50 : `gdal_calc.py -A input.tif --outfile=result.tif --calc="50*(A>50)" --NoDataValue=0` . Please add this operation and explanation to your answer so I validate it ! – Hugolpz Aug 20 '13 at 3:39
I actually made the relevant edits to your answer, hope they will be accepted. – Hugolpz Aug 20 '13 at 3:44
Thanks, I made some changes. Note that 50*(A>50) results in either 50 or 0. – Oyvind Aug 20 '13 at 3:59