Как разместить массив * n в массиве M * N? - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь соединить изображения 30px * 30px в изображение 3000px * 3000px. Если есть способ лучше, чем я описываю, пожалуйста, дайте мне знать.

Я создал BigArr = np.zeros((3000,3000)). И у меня есть мои массивы изображений (которые имеют размеры 30px * 30px). Я хочу разместить первое изображение так, чтобы оно занимало все пространство между BigArr[0][0] и BigArr[29][29].

. Есть ли простой способ сделать это? Есть ли еще более простой способ сделать то, что я пытаюсь сделать в целом?

Редактировать: второе изображение должно занимать [0][30] -> [59][29], et c.

1 Ответ

0 голосов
/ 19 февраля 2020

Если у вас есть ровно столько изображений, сколько необходимо для полного заполнения BigArr, и ваши изображения могут быть сохранены в некотором списке, вы можете создать вложенный список с нужной сеткой и использовать np.block чтобы сгенерировать такое изображение:

from matplotlib import pyplot as plt
import numpy as np

# Image sizes (width x height)
img_w, img_h = (40, 30)
f_img_w, f_img_h = (200, 300)

# Number of rows / columns in final image
r = np.int32(f_img_h / img_h)
c = np.int32(f_img_w / img_w)

# Generate some images (stored in N-dimensional array)
imgs = np.ones((img_h, img_w, r * c), np.uint8) * 5 * (np.arange(r * c) + 1)

# Assumed starting point of procedure: All images stored in list
imgs_list = [imgs[:, :, i] for i in np.arange(imgs.shape[2])]

# Generate nested list with desired grid
imgs_nested_list = [[imgs_list[y * c + x] for x in np.arange(c)] for y in np.arange(r)]

# Generate desired image
big_arr = np.block(imgs_nested_list)

plt.figure(1)
plt.imshow(big_arr, vmin=0, vmax=255)
plt.show()

Результат из примера будет выглядеть следующим образом:

Output

Надеюсь, что это поможет !

----------------------------------------
System information
----------------------------------------
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
Matplotlib:  3.2.0rc3
NumPy:       1.18.1
----------------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...