Python numpy如何将这个数组/图像列表重新整形成拼贴画?

时间:2018-06-03 19:05:23

标签: python numpy opencv

我有以下25个代表模式的迷你黑白图像列表:

imgs.shape

(25, 3, 3, 1)

即。有25种不同的3x3黑白图像模式。我想要做的是创建一个大5x53x3的大图像,这有意义吗?有点像这样:

enter image description here

我的意图是拥有可以显示和查看的形状(15, 15, 1)。我在Python中使用numpy和opencv。期待为实时处理做一些非常有效的事情,所以我认为numpy的重塑可能有意义。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

解决方案:

imgs.reshape(5, 5, 3, 3, 1).swapaxes(1, 2).reshape(15, 15, 1)

示例:

# test data 
# each 3x3 image consists of the 9 identical digits

A = np.stack([
    np.full((3, 3, 1), i)
    for i in range(1, 26)
])

with_swap = A.reshape(5, 5, 3, 3, 1).swapaxes(1, 2).reshape(15, 15, 1)
print(with_swap[...,-1])

without_swap = A.reshape(15, 15, 1)
print(without_swap[...,-1])

使用swap:

[[ 1  1  1  2  2  2  3  3  3  4  4  4  5  5  5]
 [ 1  1  1  2  2  2  3  3  3  4  4  4  5  5  5]
 [ 1  1  1  2  2  2  3  3  3  4  4  4  5  5  5]
 [ 6  6  6  7  7  7  8  8  8  9  9  9 10 10 10]
 [ 6  6  6  7  7  7  8  8  8  9  9  9 10 10 10]
 [ 6  6  6  7  7  7  8  8  8  9  9  9 10 10 10]
 [11 11 11 12 12 12 13 13 13 14 14 14 15 15 15]
 [11 11 11 12 12 12 13 13 13 14 14 14 15 15 15]
 [11 11 11 12 12 12 13 13 13 14 14 14 15 15 15]
 [16 16 16 17 17 17 18 18 18 19 19 19 20 20 20]
 [16 16 16 17 17 17 18 18 18 19 19 19 20 20 20]
 [16 16 16 17 17 17 18 18 18 19 19 19 20 20 20]
 [21 21 21 22 22 22 23 23 23 24 24 24 25 25 25]
 [21 21 21 22 22 22 23 23 23 24 24 24 25 25 25]
 [21 21 21 22 22 22 23 23 23 24 24 24 25 25 25]]

没有交换:

[[ 1  1  1  1  1  1  1  1  1  2  2  2  2  2  2]
 [ 2  2  2  3  3  3  3  3  3  3  3  3  4  4  4]
 [ 4  4  4  4  4  4  5  5  5  5  5  5  5  5  5]
 [ 6  6  6  6  6  6  6  6  6  7  7  7  7  7  7]
 [ 7  7  7  8  8  8  8  8  8  8  8  8  9  9  9]
 [ 9  9  9  9  9  9 10 10 10 10 10 10 10 10 10]
 [11 11 11 11 11 11 11 11 11 12 12 12 12 12 12]
 [12 12 12 13 13 13 13 13 13 13 13 13 14 14 14]
 [14 14 14 14 14 14 15 15 15 15 15 15 15 15 15]
 [16 16 16 16 16 16 16 16 16 17 17 17 17 17 17]
 [17 17 17 18 18 18 18 18 18 18 18 18 19 19 19]
 [19 19 19 19 19 19 20 20 20 20 20 20 20 20 20]
 [21 21 21 21 21 21 21 21 21 22 22 22 22 22 22]
 [22 22 22 23 23 23 23 23 23 23 23 23 24 24 24]
 [24 24 24 24 24 24 25 25 25 25 25 25 25 25 25]]