多波段TIFF数据提取


可以直接拿来用,只替换文件路径和名称就行。


import numpy as np 
import os
import random
from osgeo import gdal
# import cv2
import tifffile as tif
from skimage import data,exposure
from sklearn import preprocessing

#  读取图像像素矩阵
#  fileName 图像文件名
def readTif(fileName):
    dataset = gdal.Open(fileName)
    # width = dataset.RasterXSize
    # height = dataset.RasterYSize
    # GdalImg_data = dataset.ReadAsArray(0, 0, width, height)
    # return GdalImg_data
    return dataset

#保存tif文件函数
def writeTiff(im_data,im_geotrans,im_proj,path):
    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
    elif len(im_data.shape)==2:
        im_data=np.array([im_data])
        im_bands,im_height,im_width=im_data.shape
    #创建文件
    driver=gdal.GetDriverByName("GTiff")
    dataset=driver.Create(path,int(im_width),int(im_height),int(im_bands),datatype)
    if(dataset!=None): 
        dataset.SetGeoTransform(im_geotrans)#写入仿射变换参数
        dataset.SetProjection(im_proj)#写入投影
    for i in range(im_bands):
        dataset.GetRasterBand(i+1).WriteArray(im_data[i])
    del dataset

def bandsclip(path1,path2):
    dataset_img=readTif(path1)
    width=dataset_img.RasterXSize
    height=dataset_img.RasterYSize
    proj=dataset_img.GetProjection()
    geotrans=dataset_img.GetGeoTransform()
    img=dataset_img.ReadAsArray(0,0,width,height)

    img_out=[]
    #依次将各波段输出
    for i in range(img.shape[0]):
        img_out=np.array(img[i,::])
        #保存tiff格式文件数据
        writeTiff(img_out,geotrans,proj,path2+str(i)+'.tif') #输出波段的名称命名格式可以修改,结合传递的path2参数

os.chdir(r'E:/1982-2020_NDVI(5km)')

path1=r'CDRMVCCN.tiff'  #要分离波段的原始图像数据名称
path2=r'CDRMVCCN'      #分离的各波段结果图像部分名称
bandsclip(path1,path2)  #调用上面定义的波段分离函数
print('Bandsclip END!')

https://blog.csdn.net/qq_44353170/article/details/122073670(参考链接)

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值