You need to enable JavaScript to run this app. 如何用Python读取超4波段多波段影像、解决报错并调整数组维度
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 11:54:06