2013-05-07 3 views
1

Я пытаюсь выполнить пакетную обработку изображений, но у меня возникают проблемы с сохранением изображений после их создания. Вот весь код:PIL сохраняет только первое изображение

import Image 
import os 
import random 

training_images = [] 
training_path = 'cropped' 
background_images = [] 
background_path = 'background' 
training_file = 'train' 

def get_image_list(file_path): 
    return os.listdir(file_path) 

def rotate_randomely(im): 
    number = random.randint(1, 6) 
    if number == 1: 
     return im.transpose(Image.FLIP_LEFT_RIGHT) 
    elif number == 2: 
     return im.transpose(Image.FLIP_TOP_BOTTOM) 
    elif number == 3: 
     return im.transpose(Image.ROTATE_90) 
    elif number == 4: 
     return im.transpose(Image.ROTATE_180) 
    elif number == 5: 
     return im.transpose(Image.ROTATE_270) 
    else: 
     return im 

def get_random_point(maxX, maxY): 
    x = random.randint(0, maxX) 
    y = random.randint(0, maxY) 
    return x, y 

def insert_image(from_image, onto_image): 

    from_image = resize_smaller(from_image, onto_image.size) 
    x, y = get_random_point(onto_image.size[0] - from_image.size[0], onto_image.size[1] - from_image.size[0]) 
    onto_image.paste(from_image, (x, y)) 
    width = from_image.size[0] 
    height = from_image.size[1] 
    return x, y, width, height 

def resize_smaller(image, maxXY): 
    if image.size[0] > maxXY[0] or image.size[1] > maxXY[1]: 
     image = image.resize((image.size[0]/2, image.size[1]/2)) 
    if image.size[0] > maxXY[0] or image.size[1] > maxXY[1]: 
     resize_smaller(image, maxXY) 
    else: 
     return image 

training_images = get_image_list(training_path) 
background_images = get_image_list(background_path) 
print('training_images size', len(training_images)) 
print('background_images size', len(background_images)) 

for training_image in training_images: 
    index = 0 
    for background_image in background_images: 
     name = background_image 
     training_image = Image.open(training_path + '/' + training_image) 
     background_image = Image.open(background_path + '/' + background_image) 
     training_image = rotate_randomely(training_image) 
     x, y, width, height = insert_image(training_image, background_image) 
     background_image.save('images/' + str(index) + name) 
     index = index + 1 

Выход: ('training_images size', 7) ('background_images size', 1). Таким образом, поиск изображений корректно, но когда я смотрю на результаты, сохраняется только одно изображение, и оно имеет только 0 предварительно заданное имя изображения. Но я знаю, что это проходило через каждый образ, поэтому их должно было быть семь.

Я смотрел на это некоторое время, и я просто не вижу, где я ошибся. Есть ли что-то странное относительно метода сохранения Пила, о котором я не знаю?

ответ

1

введите index = 0 за пределы верхнего цикла, иначе он станет 0 на каждой итерации и сохранит верхние части старых файлов.

+1

Это всегда мелочи ... – TomJ

Смежные вопросы