两幅影像处理为相同地理坐标
from osgeo import osr, gdal
def read_img(img_path):
dataset = gdal.Open(img_path)
width = dataset.RasterXSize # 获取数据宽度
height = dataset.RasterYSize # 获取数据高度
im_geotrans = dataset.GetGeoTransform() # 获取仿射矩阵信息
im_proj = dataset.GetProjection() # 获取投影信息
src_img = dataset.ReadAsArray()
del dataset
return src_img,im_geotrans,im_proj,width,height
def change_geotrans_proj(img1,img2,img_new):
"""
坐标对齐:两幅相同大小的影像,将其中一幅的geotrans、proj赋值给另一幅
newRasterfn: 输出tif路径
rasterOrigin: 栅格数据左上角的经纬度
xsize: x方向像元大小
ysize: y方向像元大小
array: 计算后的栅格数据
"""
_, im_geotrans, im_proj, width, height = read_img(img1)
array, im_geotrans2, im_proj2, width2, height2 = read_img(img2)
cols = array.shape[1] # 矩阵列数
rows = array.shape[0] # 矩阵行数
# originX = rasterOrigin[0] # 起始像元经度
# originY = rasterOrigin[1] # 起始像元纬度
driver = gdal.GetDriverByName('GTiff')
outRaster = driver.Create(img_new, width, height,3, gdal.GDT_Byte)
# 3 is num of bands
# 括号中两个0表示起始像元的行列号从(0,0)开始
outRaster.SetGeoTransform(im_geotrans)
# 获取数据集第一个波段,是从1开始,不是从0开始
for i in range(1, 4):
outband = outRaster.GetRasterBand(i)
outband.WriteArray(array[i-1,:, :])
# outRasterSRS = osr.SpatialReference()
# # 代码4326表示WGS84坐标
# outRasterSRS.ImportFromEPSG(4326)
outRaster.SetProjection(im_proj)
outband.FlushCache()
del outRaster
if __name__ == "__main__":
#-------------------------------------------------------------
#坐标对齐:两幅相同大小的影像,将其中一幅的geotrans、proj赋值给另一幅
#-------------------------------------------------------------
img1=r'./1_after.tif'
img2=r"./1_before.tif"
img_new=r"./1_1_before.tif"
change_geotrans_proj(img1,img2,img_new)
print('finsh...')
版权声明:本文为weixin_38353277原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。