Python PIL裁剪图像并将裁剪保存为新图像/副本

时间:2020-04-21 20:14:36

标签: python python-imaging-library

使用下面的代码,我已经成功导入了图像,定义了坐标列表,然后将图像裁剪为这些坐标。但是,我当前的代码有两个问题:

  1. 因为坐标是成对的,所以它正在裁剪图像,然后裁剪该图像,而不是与父图像分开保存两个单独的作物作为新图像。

  2. 当我在代码中定义坐标时,它可以正常工作。但是,当我取消注释第一个boxcrop(第11行)以从csv获取坐标时,它不起作用。

最终,我希望代码能够导入图像,从csv文件中获取所需作物的坐标(最多2个,最多8个!),然后将每个作物保存为新图像,文件名与原始图像相同。例如,flowers.png将变为flowers_crop1,flowers_crop2等。感谢所有建议,我查看了其他帖子,但没有看到保存副本的同一问题,因此希望我不要提出任何问题。< / p>

from PIL import Image
import numpy as np
import pandas as pd

#Open image
im = Image.open(r'C:/Users/Testing/Capture.png')

#Open excel file
df = pd.read_csv(r'C:/Users/Testing/crops.csv', header=0)
#Get coordinates of box
#boxcrop = df.values.T[2].tolist()
boxcrop = ['(212,233,226,247)','(196,217,210,231)']  

for i in boxcrop:
    left, upper, right, lower = np.array([i.replace('(', '').replace(')','').split(',')], dtype=int).T
    dims = np.concatenate([left, upper, right, lower])
    im_crop = im.crop((dims))
    im_crop.save(r'C:\Users\Testing\crops\cropped.png', quality=95)

1 个答案:

答案 0 :(得分:2)

使用:

im_crop = im.copy().crop((dims))

裁剪副本。

使用f字符串保存文件名:

im_crop.save(f'blahblah{i}.png')