话不多说,直接粘代码啦。
读取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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐