我试图水平地将两个图像缝合在一起,并且我想对文件夹中的所有图像进行缝合。我将图片命名为:
img1.jpg
img1a.jpg
img2.jpg
img2a.jpg

因此,应将img1和img1a缝合在一起,而将img2与img2a缝合在一起。

我使用下面的代码手动缝制两个图像,但是无法实现如何将其扩展到整个文件夹。

我将不胜感激任何帮助。

import sys
from PIL import Image

images = map(Image.open, ['img1.jpg', 'img1a.jpg'])
widths, heights = zip(*(i.size for i in images))

total_width = sum(widths)
max_height = max(heights)

new_im = Image.new('RGB', (total_width, max_height))

x_offset = 0
for im in images:
  new_im.paste(im, (x_offset,0))
  x_offset += im.size[0]

new_im.save('img1.jpg')

最佳答案

我假设文件夹中只有针脚对。

使用os.listdir(folder)获取文件夹中的所有文件。使用sorted()按字母顺序设置它们(有时listdir()给出文件的顺序不同-可能按创建时间排序)

使用zip()和两个子列表all_files[::2]all_files[1::2],您可以创建可以与代码一起运行的对

for a, b in zip(all_files[::2], all_files[1::2]):
     stitch(a, b)




import os
import sys
from PIL import Image

def stitch(name1, name2):
    images = map(Image.open, [name1, name2])
    widths, heights = zip(*(i.size for i in images))

    total_width = sum(widths)
    max_height = max(heights)

    new_im = Image.new('RGB', (total_width, max_height))

    x_offset = 0
    for im in images:
      new_im.paste(im, (x_offset,0))
      x_offset += im.size[0]

    new_im.save(name1)

# ----

folder = 'some_folder'

# get all files in alphabetic order
all_files = sorted(os.listdir(folder))

# add folder to filename to have full path
all_files = [os.path.join(folder, name) for name in all_files]

# create pairs
for a, b in zip(all_files[::2], all_files[1::2]):
     stitch(a, b)




编辑:您也可以将iter()zip()一起使用来创建对

it = iter(all_files)
for a, b in zip(it, it):
    stitch(a, b)


要么

关于python - 如何在python中的文件夹中拼接图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59332900/

10-11 22:48
查看更多