很多时候我们对一幅影像进行一些处理后,位置信息丢失,当然分成两种情况:
(1)tif影像处理后还是tif影像,只需要把附带的坐标文件copy过去就可以了 (2)tif影像处理后变成了png影像,名字变了,直接copy附带文件的方式不靠谱,所以需要进行坐标的添加。下面实现了第二种情况,只要是tif格式,完全可以,不论你的输入波段是多少个,输出波段是多少个
这是自己进行的实验 https://blog.csdn.net/xiaotiig/article/details/118707133
import gdal
def copy_geoCoordSys(img_pos_path,img_none_path):
'''
获取img_pos坐标,并赋值给img_none
:param img_pos_path: 带有坐标的图像
:param img_none_path: 不带坐标的图像
:return:
'''
def def_geoCoordSys(read_path, img_transf, img_proj):
array_dataset = gdal.Open(read_path)
img_array = array_dataset.ReadAsArray(0, 0, array_dataset.RasterXSize, array_dataset.RasterYSize)
if 'int8' in img_array.dtype.name:
datatype = gdal.GDT_Byte
elif 'int16' in img_array.dtype.name:
datatype = gdal.GDT_UInt16
else:
datatype = gdal.GDT_Float32
if len(img_array.shape) == 3:
img_bands, im_height, im_width = img_array.shape
else:
img_bands, (im_height, im_width) = 1, img_array.shape
filename = read_path[:-4] + '_proj' + read_path[-4:]
driver = gdal.GetDriverByName("GTiff")
dataset = driver.Create(filename, im_width, im_height, img_bands, datatype)
dataset.SetGeoTransform(img_transf)
dataset.SetProjection(img_proj)
if img_bands == 1:
dataset.GetRasterBand(1).WriteArray(img_array)
else:
for i in range(img_bands):
dataset.GetRasterBand(i + 1).WriteArray(img_array[i])
print(read_path, 'geoCoordSys get!')
dataset = gdal.Open(img_pos_path)
img_pos_transf = dataset.GetGeoTransform()
img_pos_proj = dataset.GetProjection()
def_geoCoordSys(img_none_path,img_pos_transf,img_pos_proj)
参考: https://blog.csdn.net/nominior/article/details/102737294 十分感谢!
|