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文件
Python 批量tif转mat
于 2024-04-02 15:26:37 首次发布
本文介绍了一个Python函数,使用GDAL库读取和处理GeoTIFF图像,将多波段数据转换为NumPy数组,并保存为MAT文件,适用于高光谱和卫星数据处理。
摘要由CSDN通过智能技术生成