如何用Python读取超4波段多波段影像、解决报错并调整数组维度
报错根因
你的原始代码中images是存储所有GDAL数据集对象的Python列表,ReadAsArray()是osgeo.gdal.Dataset类的专属方法,不能直接对列表调用该方法,因此触发AttributeError。你参考的第二段代码也存在逻辑问题:循环中每次覆盖images变量,循环结束后只会保留最后一张影像的数据集对象,无法读取所有影像的内容。
修改后可运行代码
import os import gdal import numpy as np inputPath = "/content/drive/MyDrive/Notebook/test/tiled_stack" # 筛选目录下所有tif格式影像,避免读取非影像文件导致报错 tif_file_list = [f for f in os.listdir(inputPath) if f.lower().endswith('.tif')] # 存储所有影像处理后的数组 image_result_list = [] for file_name in tif_file_list: # 拼接完整文件路径 full_path = os.path.join(inputPath, file_name) # 打开单张影像得到GDAL数据集对象 ds = gdal.Open(full_path, gdal.GA_ReadOnly) if not ds: print(f"文件{file_name}读取失败,已跳过") continue # ReadAsArray默认返回维度为 (波段数, 高度, 宽度) raw_array = ds.ReadAsArray() # 轴重排得到你需要的 (宽度, 高度, 波段数) 维度 # 如需深度学习常用的 (高度, 宽度, 波段数) 格式,可将axes参数改为 (1,2,0) transposed_array = np.transpose(raw_array, axes=(2, 1, 0)) image_result_list.append(transposed_array) # 手动释放GDAL数据集资源,避免内存泄漏 ds = None # 输出第一张影像的维度验证结果 print(f"第一张影像数组维度:{image_result_list[0].shape}") # 如需将300张影像堆叠为统一的四维数组,可添加以下代码: # all_stacked_array = np.stack(image_result_list, axis=0) # print(f"所有影像堆叠后维度:{all_stacked_array.shape}")
内容的提问来源于stack exchange,提问作者rayan
相关产品推荐
相关产品推荐

