Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
320 views
in Technique[技术] by (71.8m points)

Python numpy how to reshape this list of arrays/images into a collage?

I've got the following list of 25 mini black-and-white images representing patterns:

imgs.shape

(25, 3, 3, 1)

I.e. there are 25 different 3x3 black and white image patterns. What I want to do is create a single large image that's 5x5 of these 3x3 blocks, does that make sense? Kind of like this below:

enter image description here

My intention is then to have something of shape (15, 15, 1) that I can display and view like this. I'm using numpy and opencv with Python. I am looking to do something quite efficient for real-time processing, so I thought numpy's reshape might make sense.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Solution:

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

Examples:

# 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])

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

Without swap:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...