【问题标题】:How to Stitch Images in a folder in python如何在python的文件夹中拼接图像
【发布时间】:2019-12-14 16:36:06
【问题描述】:

我正在尝试将两个图像水平拼接在一起,我想对文件夹中的所有图像执行此操作。我的图像命名为: 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) 获取文件夹中的所有文件。问题可能在于创建对 - 但如果它们是按字母顺序排列的,那么您可以获得 files[0:2]files[2:3] 等。然后对每一对运行您的代码。

标签: python image-processing


【解决方案1】:

我假设文件夹中只有成对缝合。

使用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)

【讨论】:

  • 效果很好,只是它给 .DS_Store 文件提供了错误。所以添加 all_files = os.listdir(path) if '.DS_Store' in lst: all_files.remove('.DS_Store') 让它工作!
  • 您可以尝试glob.glob(folder + "/*.jpg") 仅获取 jpg 文件,甚至获取完整路径。
猜你喜欢
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2011-12-26
  • 1970-01-01
相关资源
最近更新 更多