问题描述
我想垂直连接很多图像。我使用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)
在读取所有图像后,只需将它们添加到list
循环中的for
中,并将列表传递给np.concatenate
考虑将matplotlib.pyplot.imread
与列表理解功能或skimage.io
一起使用,而不是map
(这可能是由于版本或CPU问题引起的)。下面用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,interpolation='nearest')
plt.axis('off')
plt.savefig(os.path.join(spec_path,"Output.png"))