basic.py
from osgeo import gdal
import numpy as np
np.seterr(divide='ignore', invalid='ignore')
class Grid:
# =============================================================================
# 1. 函数1 read_tiff读取影像
# =============================================================================
def read_tiff(self, filename):
# 读取影像,获取影像位置
dataset = gdal.Open(filename)
# 获取影像波段数,获取影像长宽
im_band=dataset.GetRasterBand #波段数
im_width = dataset.RasterXSize # 宽,列数
im_height = dataset.RasterYSize # 高,行数
# 仿射矩阵
im_GeoTransform = dataset.GetGeoTransform()
# 地图投影信息
img_proj = dataset.GetProjection()
im_data = dataset.ReadAsArray(0, 0, im_width, im_height)
del dataset
return img_proj, im_GeoTransform, im_data
WriteSigTif.py
import os
import sys
from basic import Grid
from osgeo import gdal
import numpy as np
import random
if __name__ == "__main__":
run = Grid()
inpath=r'Test.tif' #案例影像,用于加载投影信息
img_proj, im_GeoTransform, im_data = run.read_tiff(inpath)
#set Single band imaging's min and max
vmin = 1
vmax = 8
outpath = r'Gray.tif'
Xsize = 100;
Ysize = 100;
out_data = np.ones((Xsize, Ysize))
for i in range(Xsize):
for j in range(Ysize):
out_data[i][j] = random.uniform(vmin,vmax)
datatype = gdal.GDT_Float32 #输出影像数据类型
im_bands, (im_height, im_width) = 1, out_data.shape
driver = gdal.GetDriverByName("GTiff")
dataset = driver.Create(outpath, im_width, im_height, im_bands, datatype)
dataset.SetGeoTransform(im_GeoTransform)
dataset.SetProjection(img_proj)
dataset.GetRasterBand(1).WriteArray(out_data) # 写入数组数据
del dataset