话不多说,直接粘代码啦。
读取tif数据:
import numpy as np
import matplotlib.pyplot as plt
from osgeo import gdal
#输入图像
def read_tif(path):
dataset = gdal.Open(path)
print(dataset.GetDescription())#数据描述
cols = dataset.RasterXSize#图像长度
rows = (dataset.RasterYSize)#图像宽度
im_proj = (dataset.GetProjection())#读取投影
im_Geotrans = (dataset.GetGeoTransform())#读取仿射变换
im_data = dataset.ReadAsArray(0, 0, cols, rows)#转为numpy格式
#im_data[im_data > 0] = 1 #除0以外都等于1
del dataset
return im_proj, im_Geotrans,im_data
path = ""#tif文件所在位置
im_proj,im_Geotrans,im_data = read_tif(path)#读取tif文件及其投影,行列号,仿射等
输出tif数据:
#输出图像
def write_tif(newpath,im_data,im_Geotrans,im_proj,datatype):
if len(im_data.shape)==3:
im_bands, im_height, im_width = im_data.shape
else:
im_bands, (im_height, im_width) = 1, im_data.shape
diver = gdal.GetDriverByName('GTiff')
new_dataset = diver.Create(newpath, im_width, im_height, im_bands, datatype)
new_dataset.SetGeoTransform(im_Geotrans)
new_dataset.SetProjection(im_proj)
if im_bands == 1:
new_dataset.GetRasterBand(1).WriteArray(im_data)
else:
for i in range(im_bands):
new_dataset.GetRasterBand(i+1).WriteArray(im_data[i])
del new_dataset
newpath=""#输出位置
write_tif(newpath,im_data,im_Geotrans,im_proj,gdal.GDT_UInt16)
以上。OwO