Python numpy如何将此数组/图像列表重塑为拼贴?
我有以下25张代表图案的迷你黑白图像: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).
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)
。这就是为什么简单的整形不起作用。是的,默认的整形似乎给了我混乱的结果。我会仔细考虑并尝试你的方法。哟,太棒了,成功了!谢谢兄弟。我觉得这不仅仅是简单的重塑。