如何在 python 中使用 for 循环垂直拼接 1000 张图像?

How to concatenate 1000 images vertically using for loop in python?

我想垂直拼接很多图片。我使用 skimage 读取图像,然后在每次迭代中 io 读取图像并 vconcat 将新图像垂直连接到旧图像上。我的代码的结果没有连接图像,只是组合图像。有什么想法可以让每次迭代中的每张图像彼此垂直连接吗?

我想垂直拼接第一张图片和第二张图片:

但我得到了这个结果:

data = []
if nSpectogram < 3765:
    for k in range(0, 21):
        path = io.imread('E:\wavelet\spectrograms\paz05\'+'spec_'+isPreictal+'_'+str(nSpectogram+1)+'_'+str(k+1)+'.png')
        im_v_array = np.array(im_v)
        data.append(path)
    res = np.concatenate(data)
    plt.imshow(res, cmap='inferno', aspect='auto', interpolation='nearest')

使用-

merged_img = []
for i in range(3):
    img = io.imread('https://machinelearningblogs.com/wp-content/uploads/2018/03/849825_XL-830x400.jpg')
    merged_img.append(img)

merge = np.concatenate(merged_img)

plt.imshow(merge)

只需将所有图像添加到 for 循环中的 list 中,然后将列表传递给 np.concatenate

而不是 skimage.io(这可能是由于版本或 CPU 问题),考虑使用 matplotlib.pyplot.imread 和列表理解或 map。下面用OP的两张图演示一下。

import numpy as np
import matplotlib.pyplot as plt

img_paths = ["OP_Image_1.png", "OP_Image_2.png"]

data = [plt.imread(img) for img in img_paths]
# data = list(map(mpimg.imread, img_paths))

res = np.concatenate(data)
plt.imshow(res, cmap='inferno', aspect='auto', interpolation='nearest')

plt.axis('off')
plt.show()


具体来说,对于 OP 的文件迭代:

import os
import numpy as np
import matplotlib.pyplot as plt

...
spec_path = r"E:\wavelet\spectrograms\paz05"                     # RAW STRING FOR BACKSLASHES
spec_file = f"spec_{isPreictal}_{str(nSpectogram+1)}_{{}}.png"   # F STRING FOR INTERPOLATION

if nSpectogram <3765:
   data = [plt.imread(os.path.join(spec_path, spec_file.format(k+1))) for k in range(21)]

   res = np.concatenate(data)
   plt.imshow(res, cmap='inferno', aspect='auto', interpolation='nearest')
   
   plt.axis('off')
   plt.savefig(os.path.join(spec_path, "Output.png"))