Python 批量tif转mat

本文介绍了一个Python函数,使用GDAL库读取和处理GeoTIFF图像,将多波段数据转换为NumPy数组,并保存为MAT文件,适用于高光谱和卫星数据处理。
摘要由CSDN通过智能技术生成
import os
from osgeo import gdal
import numpy as np
from PIL import Image
# 提取432三波段
from spectral import *
# 输入文件夹路径
import scipy.io as sio



def get_img(dataset_img):
    width = dataset_img.RasterXSize  # 获取行列数
    height = dataset_img.RasterYSize
    bands = dataset_img.RasterCount  # 获取波段数
    print("行数为:", height)
    print("列数为:", width)
    print("波段数为:", bands)

    proj = dataset_img.GetProjection()  # 获取投影信息
    # print("投影信息", proj)
    geotrans = dataset_img.GetGeoTransform()  # 获取仿射矩阵信息
    img = dataset_img.ReadAsArray(0, 0, width, height)
    new_img = np.transpose(img, (1, 2, 0))
    return new_img

def tiftomat(input_folder,output_folder,nm,name):
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    # 遍历输入文件夹中的.tif文件
    for file_name in os.listdir(input_folder):
        if file_name.endswith('.tif'):
            # 构建输入文件的完整路径
            input_file = os.path.join(input_folder, file_name)

            # 打开.tif文件
            image = get_img(gdal.Open(input_file))
            if nm:
                image = image /10000.0 #这里将DN值转为反射率,我是资源一号02D高光谱数据和哨兵2号数据,所以要除以10000,看具体情况

            # 创建输出文件的完整路径
            output_file = os.path.join(output_folder, file_name.replace('.tif', '.mat'))
            sio.savemat(output_file,{name:image})


if __name__ == '__main__':
    scale = '1080'

    root = r'F:\datasets\ZY\ZY_S2_TEST\\' + scale
    x_path = root + '\X'
    y_path = root + '\Y'
    z_path = root + '\Z'

    out_root = 'F:\datasets\ZY\ZY_S2_TEST\\' +scale
    out_x =  out_root + '\X_mat'
    out_y = out_root + '\Y_mat'
    out_z = out_root + '\Z_mat'

    tiftomat(y_path, out_y,nm=True,name='hrmsi')
    tiftomat(z_path, out_z,nm=False,name='lrhsi')
    tiftomat(x_path, out_x,nm=True,name='hrhsi')


#文件夹下有多个.tif文件,把他们都转为.mat文件
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python与遥感

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值