如何从 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 文件