我是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())
答案 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数组。