【python】九宫格合成图

两个源目录路径

source_directory1 
source_directory2

随机选取图片

从指定的源目录 source_dir 中随机选择指定数量 num_images 的文件,并返回这些选中文件的完整路径列表。

具体步骤如下:

  1. 列出源目录中的所有文件(不包括子目录)。
  2. 从所有文件中随机选择指定数量的文件,使用 random.sample 函数实现。
  3. 返回选中文件的完整路径列表。

需要注意的是,该函数返回的是一个包含选中文件路径的列表,但是在给定的代码中,return 语句放在了 for 循环内,导致函数只返回了一个路径,而不是路径列表。

def select_and_copy_images(source_dir, num_images):
    # 获取源目录中所有文件的列表
    all_files = [f for f in os.listdir(source_dir) if os.path.isfile(os.path.join(source_dir, f))]
    # 从列表中随机选择指定数量的文件
    selected_files = random.sample(all_files, num_images)
    # 复制选中的文件到目标目录
    for file in selected_files:
    #     shutil.copy(os.path.join(source_dir, file), os.path.join(target_dir, file))
        return os.path.join(source_dir, file)

打乱顺序

random.shuffle(image_paths)

粘贴图片

    for i in range(3):
        for j in range(3):
            img_path = image_paths[i * 3 + j]
            small_img = Image.open(img_path)
            small_img.thumbnail(small_image_size, Image.LANCZOS)
            collage.paste(small_img, (j * small_image_size[0], i * small_image_size[1]))

附完整代码

from PIL import Image

import os
import shutil
import random
from PIL import Image
import random

source_directory1 = r'rice/Rice_Image_Dataset/Karacadag'  # 源目录路径
source_directory2 = r'rice/Rice_Image_Dataset/Jasmine'  # 源目录路径
target_directory='1'

def select_and_copy_images(source_dir, num_images):
    # 获取源目录中所有文件的列表
    all_files = [f for f in os.listdir(source_dir) if os.path.isfile(os.path.join(source_dir, f))]
    # 从列表中随机选择指定数量的文件
    selected_files = random.sample(all_files, num_images)
    # 复制选中的文件到目标目录
    for file in selected_files:
    #     shutil.copy(os.path.join(source_dir, file), os.path.join(target_dir, file))
        return os.path.join(source_dir, file)
def generate_collage(image_paths, output_path):
    # Shuffle the image order
    random.shuffle(image_paths)

    # Create a new large image in a 3x3 grid
    collage_size = (300, 300)  # Adjust to your desired size
    collage = Image.new('RGB', collage_size)

    # Calculate the size of each small image
    small_image_size = (collage_size[0] // 3, collage_size[1] // 3)

    # Paste each small image onto the large image
    for i in range(3):
        for j in range(3):
            img_path = image_paths[i * 3 + j]
            small_img = Image.open(img_path)
            small_img.thumbnail(small_image_size, Image.LANCZOS)
            collage.paste(small_img, (j * small_image_size[0], i * small_image_size[1]))

    # Save the generated collage
    collage.save(output_path)
    #collage.show()

number_of_images=1
# 九张图片的路径
image_paths = [
     select_and_copy_images(source_directory1,  number_of_images),
     select_and_copy_images(source_directory1,  number_of_images),
     select_and_copy_images(source_directory1,  number_of_images),
     select_and_copy_images(source_directory1,  number_of_images),
     select_and_copy_images(source_directory1,  number_of_images),
     select_and_copy_images(source_directory2,  number_of_images),
     select_and_copy_images(source_directory1,  number_of_images),
     select_and_copy_images(source_directory1,  number_of_images),
     select_and_copy_images(source_directory1,  number_of_images)
]

for i in range(1,20):
    output_path =r"路径" + str(i) + ".jpg"
    # 生成九宫格图
    generate_collage(image_paths, output_path)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亿巫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值