PIL只保存第一个imag

2024-04-25 14:57:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图做一些批处理图像处理,但我有麻烦保存图像一旦创建。以下是所有代码:

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。但我知道它贯穿了每一幅图像,所以应该有七幅。你知道吗

我已经看了一段时间了,只是不知道哪里出了问题。皮尔的save方法有什么我不知道的奇怪之处吗?你知道吗


Tags: pathfrom图像imagenumbersizereturndef
1条回答
网友
1楼 · 发布于 2024-04-25 14:57:25

index = 0放在上面的for循环之外,否则每次迭代它都会变成0,并保存在旧文件的上面。你知道吗

相关问题 更多 >