Python PIL, чтобы обрезать изображение и сохранить обрезку как новое изображение / копию - PullRequest
0 голосов
/ 21 апреля 2020

Используя мой код ниже, я успешно смог импортировать изображение, определить список координат, а затем обрезать изображение до этих координат. Тем не менее, у меня есть две проблемы с моим текущим кодом:

  1. Поскольку координаты попарно, это обрезка изображения, а затем обрезка ЭТОГО изображения, а не сохранение двух отдельных обрезок в качестве новых изображений. , отдельно от родительского изображения.

  2. Когда я определяю свои координаты в коде, все работает нормально. Но когда я раскомментирую первый boxcrop (строка 11), чтобы получить координаты из моего csv, он не работает.

В конце концов, я бы хотел, чтобы код мог импортировать изображение, получить координаты желаемых культур (их может быть больше 2, до 8!) из файла CSV, а затем сохранить каждую культуру как новое изображение с тем же именем файла, что и у исходного изображения. например, flowers.png стал бы flowers_crop1, flowers_crop2, et c et c. Любой совет приветствуется, я просмотрел другие посты и не видел такой же проблемы с сохранением копий, поэтому надеюсь, что я не задаю вопрос повторно.

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 Ответ

2 голосов
/ 21 апреля 2020

Используйте:

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

, чтобы обрезать копию.

Используйте f-строку, чтобы сохранить имя вашего файла:

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