Python 和gdal读遥感影像,进行相应的波段运算后再写出。读为numpy数组,写出为envi格式的,只能单个波段读,略有缺陷。(部分代码摘自网络,向他们表示敬意)
import numpy as np
import gdal
import os
def image(path):
#读为一个numpy数组
dataset = gdal.Open(path)
band = dataset.GetRasterBand(1)
nXSize = dataset.RasterXSize #列数
nYSize = dataset.RasterYSize #行数
data= band.ReadAsArray(0,0,nXSize,nYSize).astype(np.float)
return data
def writeimage(filename,dst_filename,data):
#filename用于获取坐标信息,dst_filename目标文件格式为ENVI格式,data为要写出的数据,
dataset=gdal.Open(filename)
projinfo=dataset.GetProjection()
geotransform = dataset.GetGeoTransform()
format = "ENVI"
driver = gdal.GetDriverByName( format )
dst_ds = driver.Create( dst_filename,dataset.RasterXSize, dataset.RasterYSize,
1, gdal.GDT_Float32 )
dst_ds.SetGeoTransform(geotransform )
dst_ds.SetProjection( projinfo )
dst_ds.GetRasterBand(1).WriteArray( data )
dst_ds = None
def getListFiles(path):
#获取文件目录下的所有文件(包含子文件夹内的文件)
assert os.path.isdir(path),'%s not exist,'%path
ret=[]
for root,dirs,files in os.walk(path):
for filespath in files:
ret.append(os.path.join(root,filespath))
return ret