Python numpy如何将此数组/图像列表重塑为拼贴?

Python numpy如何将此数组/图像列表重塑为拼贴?,python,numpy,opencv,Python,Numpy,Opencv,我有以下25张代表图案的迷你黑白图像: imgs.shape (25,3,3,1) 即,有25种不同的3x3黑白图像模式。我想做的是创建一个大图像,它是这些3x3块的5x5,这有意义吗?有点像下面这样: 然后,我的意图是拥有某种形状的(15,15,1),我可以像这样显示和查看。我在Python中使用numpy和opencv。我希望做一些非常有效的实时处理,所以我认为numpy的重塑可能是有意义的。解决方案: imgs.reshape(5, 5, 3, 3, 1).swapaxes(1, 2).

我有以下25张代表图案的迷你黑白图像:

imgs.shape

(25,3,3,1)

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

然后,我的意图是拥有某种形状的
(15,15,1)
,我可以像这样显示和查看。我在Python中使用numpy和opencv。我希望做一些非常有效的实时处理,所以我认为numpy的重塑可能是有意义的。

解决方案:

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])
交换:

[[ 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]]
解决方案:

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])
交换:

[[ 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]]

有那么简单吗?它拼贴图像的顺序是什么?是否
imgs.reformate((15,15,1))
不符合您的要求?@miradulo您能定义行大调与列大调吗?那么1到5是第一行,然后是它下面的6到11,等等?这可能是我需要的。继续添加答案,我将测试并接受:)@JDS文档中有一些有用的信息。使用较小的数组来查看事物是如何工作的可能很有用。如果其他人想写答案,欢迎他们。好吧,我从来没有在图片上测试过他们-我必须使用Swapax()。对不起!有那么简单吗?它拼贴图像的顺序是什么?是否
imgs.reformate((15,15,1))
不符合您的要求?@miradulo您能定义行大调与列大调吗?那么1到5是第一行,然后是它下面的6到11,等等?这可能是我需要的。继续添加答案,我将测试并接受:)@JDS文档中有一些有用的信息。使用较小的数组来查看事物是如何工作的可能很有用。如果其他人想写答案,欢迎他们。好吧,我从来没有在图片上测试过他们-我必须使用Swapax()。对不起!你能解释一下为什么需要这样做吗?与仅仅进行重塑(15,15,1)相比会发生什么?这是怎样的:
imgs\u cols=imgs。重塑(25*3,3,1)
只会给你一列图像。如果您随后执行
imgs\u col.reformate(15,15,1)
您将获得一次包含约1.5个图像的行。但是我们也知道,
imgs.reformate(25*3,3,1).reformate(15,15,1)==imgs.reformate.reformate(15,15,1)
。这就是为什么简单的整形不起作用。是的,默认的整形似乎给了我混乱的结果。我会仔细考虑并尝试你的方法。哟,太棒了,成功了!谢谢兄弟。我觉得不仅仅是简单的重塑。你能解释为什么需要这个吗?与仅仅进行重塑(15,15,1)相比会发生什么?这是怎样的:
imgs\u cols=imgs。重塑(25*3,3,1)
只会给你一列图像。如果您随后执行
imgs\u col.reformate(15,15,1)
您将获得一次包含约1.5个图像的行。但是我们也知道,
imgs.reformate(25*3,3,1).reformate(15,15,1)==imgs.reformate.reformate(15,15,1)
。这就是为什么简单的整形不起作用。是的,默认的整形似乎给了我混乱的结果。我会仔细考虑并尝试你的方法。哟,太棒了,成功了!谢谢兄弟。我觉得这不仅仅是简单的重塑。