[python]对多波段遥感影像进行批量波段拆分

本文介绍了一个使用Python和GDAL库的方法,对同一文件夹内的多波段遥感影像进行批量拆分,将每个波段保存为独立的GeoTIFF文件。通过readTif和writeTiff函数实现图像数据的读取、处理和保存。
摘要由CSDN通过智能技术生成

对同一文件夹内的多波段遥感影像进行批量波段拆分

拆分后保存在同一文件夹内,由band1、band2、band3、band4等区分不同波段

import numpy as np
import os
import random
from osgeo import gdal

#  读取图像像素矩阵
#  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,file):
    dataset_img=readTif(path1+file)
    width=dataset_img.RasterXSize
    height=dataset_img.RasterYSize
    proj=dataset_img.GetProjection()
    geotrans=dataset_img.GetGeoTransform()
    img=dataset_img.ReadAsArray(0,0,width,height)

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


read_path='读取数据文件夹/'
save_path='存放拆分后数据文件夹/'
#提取tif文件名称
files=[f for f in os.listdir(read_path) if f.endswith('.tif')]
for file in files:
    bandsclip(read_path,save_path,file)
print('Bandsclip END!')

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值