背景
图像镶嵌指讲几张栅格图像镶嵌到同一张图像中,也就是拼接图像。栅格图像是有明确的坐标系和空间范围的,因此待镶嵌的图像必须有一样的地理坐标坐标系或者投影坐标系,否则是无法镶嵌在同一坐标系中的。
本文使用的是gdal,而不是rasterio,但rasterio是基于gdal的,本文默认你已经安装好了gdal,没有装的请移步我的geopandas安装教程。
实战
from osgeo import gdal, gdalconst
tifPath = './data/' # 待融合的图像所在的文件夹
inputFiles = []
inputProj = None
outline = 'D:/A_2021寒假/城市群相关/Data/0Slab中国基础地理数据/China/China_single.shp'
outputfilePath = './output/wrap.tif'
for path in tifPaths:
inputrasfile = gdal.Open(path, gdal.GA_ReadOnly) # 读取影像
inputProj = inputrasfile.GetProjection() # 获取坐标系
inputFiles.append(inputrasfile) # 推入列表
options = gdal.WarpOptions(srcSRS=inputProj, # 输入坐标系
dstSRS=inputProj, # 输出坐标系
format='GTiff', # 图像格式
resampleAlg=gdalconst.GRA_Bilinear, # 重采样算法,这里是双线性内插
dstNodata=-1, # 缺省值
cutlineLayer=outline, # 输出范围,这里可以是一个外轮廓shp数据
outputType=gdalconst.GDT_Int32) # 数据类型,这里是有符号32位整型
gdal.Warp(outputfilePath,inputFiles,options=options) # 图像镶嵌
注意事项
- 要保证镶嵌图像的坐标系一致,不一定要有投影坐标系,只有地理坐标系也可以。
- 数据类型保持一致
- cutlineLayer可以限制图像范围
- 重采样算法有很多,另外还有以下几种可选