Python:如何读取.hdr文件自带的高光谱卫星数据
Python: How to read hyperspectral satellite data that comes with a .hdr file
我有卫星数据文件 (2) satdat
和 satdat.hdr
。
根据提供的答案 here,我尝试了以下操作,但是,它给了我一个无效的 header 格式错误。
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 header 文件抛出。
期待任何库打开这种类型的文件,除了 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
我有卫星数据文件 (2) satdat
和 satdat.hdr
。
根据提供的答案 here,我尝试了以下操作,但是,它给了我一个无效的 header 格式错误。
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 header 文件抛出。 期待任何库打开这种类型的文件,除了 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