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

Python PIL裁剪图像并将裁剪保存为新图像/副本,python,python-imaging-library,Python,Python Imaging Library,使用下面的代码,我成功地导入了一个图像,定义了一个坐标列表,然后将图像裁剪成这些坐标。但是,我当前的代码有两个问题: 因为坐标是成对的,所以它将裁剪图像,然后裁剪该图像,而不是将两个单独的裁剪保存为新图像,与父图像分开 当我在代码中定义坐标时,它工作得很好。但是,当我取消注释第一个boxcrop(第11行)以从csv获取坐标时,它不起作用 最后,我希望代码能够导入一个图像,从csv文件中获取所需作物的坐标(可能有2个以上,最多8个!),然后将每个作物保存为一个新图像,文件名与原始图像相同。例如,

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

  • 因为坐标是成对的,所以它将裁剪图像,然后裁剪该图像,而不是将两个单独的裁剪保存为新图像,与父图像分开

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

  • 最后,我希望代码能够导入一个图像,从csv文件中获取所需作物的坐标(可能有2个以上,最多8个!),然后将每个作物保存为一个新图像,文件名与原始图像相同。例如,flowers.png将变成flowers\u crop1、flowers\u crop2等。任何和所有的建议都很感谢,我看过其他帖子,没有看到保存副本的相同问题,所以我希望我没有再问问题

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

    裁剪副本

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

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

    裁剪副本

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

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

    这里有两个问题。如果你把问题一分为二,你就有更好的机会找到答案。例如,可以在中找到裁剪图像。然后您需要搜索cv2.imwrite或类似的方法将图像写入磁盘。@smttsp谢谢您的建议!另一个用户很快解决了我的复制问题,所以现在csv输入是唯一的问题。非常感谢。这里有两个问题。如果你把问题一分为二,你就有更好的机会找到答案。例如,可以在中找到裁剪图像。然后您需要搜索cv2.imwrite或类似的方法将图像写入磁盘。@smttsp谢谢您的建议!另一个用户很快解决了我的复制问题,所以现在csv输入是唯一的问题。非常感谢。