Python:如何读取 .hdr 文件附带的高光谱卫星数据

问题描述

我有卫星数据文件 (2),它们以 satdatsatdat.hdr 形式提供。 根据提供的答案 here,我尝试了以下操作,但是,它给了我无效的标头格式错误

import imageio
from pathlib import Path

imageio.plugins.freeimage.download()

datapath = Path(r'./sat_data/')

filename = str(datapath / 'satdat.hdr')    # I even tried not using this extension
im = imageio.imread(filename,format='HDR-FI')
print(im.shape)

我期待这将数据读入 numpy 数组;而是将错误作为无效的 ENVI 头文件抛出。 期待任何库打开这种类型的文件,除了 OpenCV(由于我使用的计算环境的某些限制。)

解决方法

经过多次反复试验,以下对我有用:

import spectral.io.envi as envi
from pathlib import Path

datapath = Path(r'./sat_data/')

header_file = str(datapath / 'satdat.hdr')
spectral_file = str(datapath / 'satdat')

numpy_ndarr = envi.open(header_file,spectral_file)

img = numpy_ndarr.read_bands([10,11,12])  # select the bands

# Here,img is an numpy nd-array

print(img.shape)    # returns (100,100,3)

我希望其他人会觉得这很有用。可以找到光谱库here