如何在 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"))
我想垂直拼接很多图片。我使用 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"))