前言
在遥感应用领域,有时候需要对tif进行读取转为数组,有时候也需要将数组写为tif。基于此,我在想能否写一个python函数实现,方便以后调用。请看下文...
具体代码
1.引入库
import os
import numpy as np
from osgeo import gdal
2.tif读取成数组
def read_img(self, filename):
dataset = gdal.Open(filename)
im_geotrans = dataset.GetGeoTransform()
im_proj = dataset.GetProjection()
im_data = dataset.ReadAsArray()
del dataset
return im_proj, im_geotrans, im_data
3.数组保存为tif
def write_img(self, filename, im_proj, im_geotrans, im_data):
# 判断栅格数据的数据类型
if 'int8' in im_data.dtype.name:
datatype = gdal.GDT_Byte
elif 'int16' in im_data.dtype.name:
datatype = gdal.GDT_UInt16
else:
datatype = gdal.GDT_Float32
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
# 创建文件
driver = gdal.GetDriverByName("GTiff")
dataset = driver.Create(filename, im_width, im_height,im_bands, datatype)
dataset.SetGeoTransform(im_geotrans)
dataset.SetProjection(im_proj)
if im_bands == 1:
dataset.GetRasterBand(1).WriteArray(im_data)
else:
for i in range(im_bands):
dataset.GetRasterBand(i + 1).WriteArray(im_data[i])
del dataset
总结
本文通过python实现了对tif进行读取转为数组以及将数组写为tif这两种函数的定义,方便以后直接调用,需要的话可以直接copy,以备不时之需。