from osgeo import gdal
dataset = gdal.Open(dir) #dir--文件全路径
将影像打开为osgeo.gdal.Dataset,可以通过一些方法或函数查看其属性
dataset.RasterCount #获取波段数目
dataset.RasterXSize #获取影像宽度
dataset.RasterYSize #获取影像高度
dataset.GetProjection() #获取投影信息
dataset.GetGeoTransform() #获取仿射变换参数
这里重点说一下GetGeoTransform(),函数的输出为一个元组,可以通过list()转换为列表。输出包含六个值,分别为:
GT(0)和GT(3)
是第一组,表示图像左上角的地理坐标;
GT(1)和GT(5)
是第二组,表示图像横向和纵向的分辨率(一般这两者的值相等,符号相反,横向分辨率为正数,纵向分辨率为负数);
GT(2)和GT(4)
是第三组,表示图像旋转系数,对于一般图像来说,这两个值都为0。
dataset不能直接进行可视化等操作,需要进一步对其进行操作,这里可以实现两类操作:
band = dataset.GetRasterBand(i) #i为波段号
band的格式为osgeo.gdal.Band,需要注意的是波段号与通常的矩阵等不同,从1开始。通过一些方法或函数可以获取波段数据的属性。
band.XSize #波段宽
band.YSize #波段高
band.DataType #波段数据类型
band.GetNoDataValue() #波段无属性值
band.GetMaximum() #获取最大值
band.ComputeRasterMinMax() #计算最大最小值
需要注意的是DataType方法。该方法的返回值是一个整数值,而非直接获得数据类型名称,需要我们通过对应表进行对照。我这里建立了一个字典,方便大家自取。
dict = {
0:GDT_Unknown
1:GDT_Byte
2:GDT_UInt16
3:GDT_Int16
4:GDT_UInt32
5:GDT_Int32
6:GDT_Float32
7:GDT_Float64
8:GDT_CInt16
9.GDT_CInt32
10:GDT_CFloat32
11:GDT_CFloat64
}
下一步就是获取波段数据并进行操作,将波段读为Raster(即二进制)使用的是ReadRaster()函数
band.ReadRaster(xoff=0, yoff=0, #指定想要读取的部分原点位置在整张图像中距离全图原点的位置(以像元为单位)
xsize=None, ysize=None, # 指定要读取部分图像的矩形的长和宽(以像元为单位