本打算自己写一个拼接函数,但是感觉太折腾了,查了一下gdal的实现方法,发现有封装的非常好的一个方法(gdal.Warp
)可以解决,直接就拿来用了。
一行代码就可以解决,需要注意的
gdal.Warp(out_mosaic_path, [img_path_1, img_path_2], srcNodata=0.0, dstNodata=0.0)
out_mosaic_path
:拼接好的影像的输出路径
[img_path_1, img_path_2, ······]
:列表形式,传入所有需要进行拼接的tiff文件的路径;例如此处需要拼接的tiff文件有两个。
srcNodata
:原始数据集(待拼接影像)的缺失值数值。(例如你的遥感影像中0.0为缺失值,那么就传入0.0)
dstNodata
:设置拼接好的遥感影像的缺失值(这里就还是照旧0.0吧,如果说你觉得0.0可能是有意义的,那么你可以设为例如-9999等)
至于批量处理,例如我需要相同日期的影像进行拼接,那么可以如下操作:
in_dir = r'J:\Objects\TobaccoLeafRecognition\Data\VV_VH\TIFF\in_TIFF'
out_dir = r'J:\Objects\TobaccoLeafRecognition\Data\VV_VH\TIFF\in_TIFF'
for i in range(1, 13):
date_str = 'S1A_IW_GRDH_1SDV_2019_{:02}*.tiff'.format(i) # 每个月
mosaic_paths = glob(os.path.join(in_dir, date_str))
gdal.Warp(os.path.join(out_dir, 'S1_{:02}.tiff'.format(i)), mosaic_paths, srcNodata=0.0, dstNodata=0.0)