如何将图像中的多个波段导入numpy?

时间:2017-04-28 15:41:29

标签: python arrays numpy image-processing gdal

我是python / numpy的新手。我需要将 n 数据带(~125)从多波段图像导入 n - 维数组。每个值都是一个16位有符号整数。目前我有python代码,如下所示:

stream = bytearray()

mbImage = open(filename, mode='rb'); 

while curr <= filesize: 
    mbImage.seek(curr)
    b = mbImage.read(samples * 2)
    stream += b 
    curr += (2 * bands * samples) 

如何将此代码转换为numpy,以便我可以为每个乐队执行此操作?我尝试了以下,但不起作用(包括gdal):

npBandArr = np.array(inDs.GetRasterBand(10).ReadAsArray())

3 个答案:

答案 0 :(得分:2)

GDAL已经返回Numpy数组,因此不需要包装np.array

如果您想要读取数据集中的所有波段,您可以跳过一次选择波段并使用:

data = ds.ReadAsArray()

数组的第一个维是带(用print(data.shape)检查)。

答案 1 :(得分:1)

这里是使用gdal获取多个band的过程

import gdal
import numpy as np
dataset= gdal.Open(r"AnnualCrop_1.tif")
myarray1 = np.array(dataset.GetRasterBand(number of bands you want ).ReadAsArray()

答案 2 :(得分:0)

您应该能够将栅格数据集中的所有波段作为numpy数组循环。您可以使用pairs获取gdal数据集中的band数。

例如,这会将每个波段的数据读入数组。

GDALDataset.RasterCount

如果要将数据存储在数组中,可以使用数据集中的行数,列数和波段初始化3d数组。