問題描述
如何將文件夾中的所有圖像垂直合併/附加/堆疊/粘貼到新圖像 (How to merge/append/stack/paste all images in folder vertically to a new image)
我想合併一個文件夾中的所有圖片並將它們堆疊,水平附加。
import os
from PIL import Image
allfiles = os.listdir(os.getcwd())
imlist =[filename for filename in allfiles if filename[‑4:] in [".png", ".PNG"]]
N = len(imlist)
w, h = Image.open(imlist[0]).size
total_width = w * N
max_height = h
new_im = Image.new('RGB', (total_width, max_height))
for i in range(1,N):
img = Image.open(imlist[i])
offset = 0
appendedimages.paste(img, (x_offset,0))
offset += img.size[0]
appendedimages.save('test.jpg')
看起來,使用這個,它只顯示最後一張圖片。有人知道為什麼會這樣嗎?
我也試過
import cv2
import os
import numpy as np
allfiles = os.listdir(os.getcwd())
imlist =[filename for filename in allfiles if filename[‑4:] in [".png", ".PNG"]]
N = len(imlist)
for i in range(1,N):
img = cv2.imread(imlist[i])
horizontalAppendedImg = np.hstack(img)
cv2.imshow('Horizontal Appended', horizontalAppendedImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
但這也不起作用。
誰能幫我解決這個問題?還是有更簡單的解決方案?
參考解法
方法 1:
images are numpy arrays. As long as they have the same dimensions, you can np.hstack
them.
imlist =[cv2.imread(filename) for filename in allfiles if filename[‑4:] in [".png", ".PNG"]]
concat_img = np.hstack(imlist)
cv2.imshow('Horizontal Appended', concat_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
</code></pre>
Explanation:
- read in all images into a list with list comprehension: list of images/
np.arrays
- use
np.hstack()
to concatenate all images along the horizontal dimension. You could use more general concatenation tools with np.concatenate()
or np.stack()
if you run into issues.
參考文件