【发布时间】:2021-10-31 14:19:25
【问题描述】:
【问题讨论】:
-
不需要拆分合并。只需在切片上工作。
-
这能回答你的问题吗? Multiple images numpy array into blocks
标签: python image image-processing cv2
【问题讨论】:
标签: python image image-processing cv2
这是我对this post 的回答的复制粘贴,并添加了如何重新组合图像: 我会像在下面的代码中那样做。在我的示例中,我使用了来自 skimage.data 的部分图像来说明我的方法,并制作了不同的形状和大小,以使其看起来更漂亮。但是你可以通过调整这些参数来为你的数据做同样的事情。
from skimage import data
from matplotlib import pyplot as plt
import numpy as np
astronaut = data.astronaut()
coffee = data.coffee()
arr = np.stack([coffee[:400, :400, :], astronaut[:400, :400, :]])
plt.imshow(arr[0])
plt.title('arr[0]')
plt.figure()
plt.imshow(arr[1])
plt.title('arr[1]')
arr_blocks = arr.reshape(arr.shape[0], 4, 100, 4, 100, 3, ).swapaxes(2, 3)
arr_blocks = arr_blocks.reshape(-1, 100, 100, 3)
for i, block in enumerate(arr_blocks):
plt.figure(10+i//16, figsize = (10, 10))
plt.subplot(4, 4, i%16+1)
plt.imshow(block)
plt.title(f'block {i}')
# batch_size = 9
# some_outputs_list = []
# for i in range(arr_blocks.shape[0]//batch_size + ((arr_blocks.shape[0]%batch_size) > 0)):
# some_outputs_list.append(some_function(arr_blocks[i*batch_size:(i+1)*batch_size]))
输出:
为了重新组装图像,我会这样做:
arr_blocks = arr_blocks.reshape(-1, 4, 4, 100, 100, 3).swapaxes(2, 3)
arr_blocks = arr_blocks.reshape(-1, 400, 400, 3)
for i, block in enumerate(arr_blocks):
plt.figure()
plt.imshow(block)
plt.title('reconstruction {i}')
输出:
【讨论】: