GDAL 栅格重分类(python)
case:将具有多个栅格属性值的影像进行重编码或重分类,这其中涉及到影像的属性值的读取和更新,影响的创建等方法。
以下将分三个步骤开始实现。
1.加载影像
# 为了支持中文路径,请添加下面这句代码
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO")
# 为了使属性表字段支持中文,请添加下面这句
gdal.SetConfigOption("SHAPE_ENCODING", "")
# 注册所有的驱动
ogr.RegisterAll()
filepath = r'。。。'
ds = gdal.Open(filepath)
#判断数据读取是否成功
if ds is None:
print ('打开数据'+filepath+'失败!')
sys.exit(1)
2.获取影像的属性信息,用于创建新的影像
#读取栅格数据集的x方向像素数,y方向像素数
cols = ds.RasterXSize
rows = ds.RasterYSize
#bands = ds.RasterCount
band = ds.GetRasterBand(1)
data = band.ReadAsArray(0, 0, cols, rows)
class_num = np.unique(data)
3.进行影像重分类并创建输出影像
获取个类别的二值图像
for value in class_num:
#跳过不想进行重分类的值
if value == -9999:
continue
img = data.copy()
img[img != value] = 0
#创建并输出图像
driver = ds.GetDriver()
filename = r'D:/temp/_'+str(value)+'.tiff'
outimage = driver.Create(filename, cols, rows, 1, gdal.GDT_Int16)
geotransform = ds.GetGeoTransform()
outimage.SetGeoTransform(geotransform)
#在写入之前,还需要先引入波段对象
outBand = outimage.GetRasterBand(1)
#波段对象支持直接写入矩阵,两个参数分别为x向偏移和y向偏移
outBand.WriteArray(img, 0, 0)
#设定NoData值
outBand.SetNoDataValue(-9999)
#计算band的统计量
outBand.FlushCache()
outBand.GetStatistics(0, 1)
outimage = None
print('数据处理成功')
转载自:https://blog.csdn.net/feixiegis/article/details/80345972