论文中数据集展示代码

import os
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

# 假设每个类别的文件夹都放在'path_to_dataset'目录下
path_to_dataset = '../dataset/C_img'
# 每行展示的图片数量
images_per_row = 6
# 图片之间的间隔
spacing = 10
# 设置统一的图片大小
standard_size = (256, 256)  # 假设统一尺寸为100x100像素
# 字体大小
font_size = 60
# 字体路径
font_path = "SimHei.ttf"
img_save_path = 'img.png'

# 初始化图片列表,用于存储每个类别的图片
images_list = []
categorys = os.listdir(path_to_dataset)
# 遍历每个类别文件夹
for category in categorys[:6]:
    category_path = os.path.join(path_to_dataset, category)
    if os.path.isdir(category_path):
        # 获取该类别下的图片文件列表
        images = [f for f in os.listdir(category_path) if os.path.isfile(os.path.join(category_path, f))]
        # 只取前6张图片
        images = images[:images_per_row]
        # 打开图片,调整大小,并添加到列表
        images_in_category = []
        for img_name in images:
            img_path = os.path.join(category_path, img_name)
            img = Image.open(img_path)
            img = img.resize(standard_size)  # 调整图片大小
            images_in_category.append(img)
        images_list.append((category, images_in_category))

# 计算输出图片的尺寸
if images_list:
    # 加载字体
    font = ImageFont.truetype(font_path, font_size)

    # 计算最大的图片数量
    max_images_in_category = max(len(images) for _, images in images_list)
    # 使用 getbbox 替代 getsize
    text_width = max(ImageFont.truetype(font_path, font_size).getbbox(category)[2] for category, _ in images_list)
    total_width = (max_images_in_category * (standard_size[0] + spacing)) + text_width + 2*spacing
    total_height = (len(images_list) * (standard_size[1] + spacing)) - spacing + 2 * spacing  # 添加2*spacing用于上下边界
    # 创建一个新的空白图片,用于拼接
    result_image = Image.new('RGB', (total_width, total_height), (255, 255, 255))

    # 将每个类别的图片拼接到结果图片上,并在图片左边添加类别名称
    y_offset = spacing
    for category, images_in_category in images_list:
        draw = ImageDraw.Draw(result_image)
        # 使用 textbbox 替代 textsize
        bbox = draw.textbbox((0, 0), category, font=font)
        text_width = bbox[2] - bbox[0]
        text_height = bbox[3] - bbox[1]
        # 为文字预留额外的4个字符空间
        average_char_width = text_width / len(category)
        additional_space = average_char_width * 0.3
        text_width += additional_space
        draw.text((0, y_offset + (standard_size[1] - text_height) // 2), category, font=font, fill=(0, 0, 0))

        # 添加图片,确保 x_offset 为整数
        x_offset = int(text_width + spacing)
        for img in images_in_category:
            result_image.paste(img, (x_offset, y_offset))
            x_offset += standard_size[0] + spacing
        y_offset += standard_size[1] + spacing

    # 显示结果图片
    result_image.save(img_save_path)
    result_image.show()

else:
    print("No images found in the dataset.")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值