【问题标题】:How to import multiple bands from an image into numpy?如何将图像中的多个波段导入 numpy?
【发布时间】:2017-09-26 19:12:55
【问题描述】:

我是 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())

【问题讨论】:

    标签: python arrays numpy image-processing gdal


    【解决方案1】:

    这里是使用gdal取多波段的过程

    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】:

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

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

      data = ds.ReadAsArray()

      数组的第一个维度是波段(检查print(data.shape))。

      【讨论】:

        【解决方案3】:

        您应该能够通过栅格数据集中的所有频段作为NUMPY数组循环。您可以使用@ 987654321获取GDAL DataSet中的频带数。

        例如,这将从每个频带读取数据到数组中。

        ds = gdal.Open("path to some file")
        for band in range( ds.RasterCount ):
            band += 1
            nparray = ds.GetRasterBand(band).ReadAsArray()
        

        如果要将数据存储在数组中,则可以使用数据集中的行数,列和频带初始化3D数组。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-02
          • 2021-08-26
          • 2021-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-16
          相关资源
          最近更新 更多