如何从 python 中的两个 tif 文件创建二维 numpy 数组?

Posted

技术标签:

【中文标题】如何从 python 中的两个 tif 文件创建二维 numpy 数组?【英文标题】:How to create a two-dimensional numpy array from two tif files in python? 【发布时间】: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) 【参考方案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]

【讨论】:

以上是关于如何从 python 中的两个 tif 文件创建二维 numpy 数组?的主要内容,如果未能解决你的问题,请参考以下文章

Python:返回从列表中过滤的对象的 index() 列表

使用 Python 将“拍摄日期”Exif/XMP 信息添加到 TIF 文件

Python 抓取两个特定字符之间的子字符串

2021-08-23

如何以编程方式 (Python/JS/C++) 将矢量图形 (SVG) 插入 JPG/TIF 等光栅图像?

Imagemagick无法从tif转换为jpg