【问题标题】:How to create a two-dimensional numpy array from two tif files in python?如何从 python 中的两个 tif 文件创建二维 numpy 数组?
【发布时间】:2021-08-15 10:39:54
【问题描述】:

我在 Google Colab 工作。 我使用以下脚本导入了两个 1000 行和 1000 列的 tif 文件:

import cv2

green = cv2.imread('green.tif')
nir = cv2.imread('nir.tif')

我想创建一个数组,它在每个像素中都有一个二维向量,第一维是 green.tif 的值,第二维是 nir.tif 的值。

我该怎么做?

【问题讨论】:

  • 你的意思是第一行和第二行而不是维度?
  • 我想创建一个数组。这个数组的每个像素都有一个二维向量,第一维是green.tif的值,第二维是nir.tif的值。
  • 所以@Ehsan 的回答很好,但鉴于最后一条消息,我认为您应该将np.vstack((green,nir)) 替换为np.stack((green, nir), axis=1)

标签: python arrays numpy google-colaboratory tiff


【解决方案1】:

如果您想将两个卷交错,并将 green 视为通道 1,将 nir 视为通道 2,您可以按以下步骤操作:

ch1 = np.ones((2,2,2))
ch2 = np.zeros((2,2,2))

out = np.empty((4,2,2))

out[::2,:,:] = ch1
out[1::2,:,:] = ch2

out = out.reshape((2,2,2,2))

输出:

>>> print(out)
[[[[1. 1.]
   [1. 1.]]

  [[0. 0.]
   [0. 0.]]]


 [[[1. 1.]
   [1. 1.]]

  [[0. 0.]
   [0. 0.]]]]

如果你只想做“第一行-第二行”,看np.stack就行了。

【讨论】:

    【解决方案2】:

    你可能只是想要:

    np.vstack((green,nir))
    

    示例:

    green = np.array([1, 2, 3])
    nir = np.array([2, 3, 4])
    

    输出:

    array([[1, 2, 3],
           [2, 3, 4]])
    

    如果要水平堆叠,请使用np.hstack

    【讨论】:

      【解决方案3】:

      如果是两张 2D 图像,您可以按以下方式进行: 每个元素 out[i, j] 都是一个向量,所以第一个元素是 green[i, j],第二个元素是 nir[i, j]

      green = np.array([[0, 1], [2, 3]])
      nir = np.array([[3, 2], [1, 0]])*-1
      
      out = np.stack((green, nir), axis=2)
      

      输出:

      >>> print(out[0,0])
      [ 0 -3]
      

      【讨论】:

        猜你喜欢
        • 2023-01-04
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 2017-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多