作品展示
背景需求:
前文做了“”材料”图片的数一数学具,效果不错,
https://blog.csdn.net/reasonsummer/article/details/138466325https://blog.csdn.net/reasonsummer/article/details/138466325
为了让图案内容更丰富,我又选了孩子们“春游活动(学军活动计划书)”上的人物图案——军人叔叔站军姿、吊杠训练、射击训练等动作
一、素材准备
选一些特征明显人物图片,进行特写拍照
放到Photoshop里面修图,做成黑白简笔画(517*517像素)
素材位置
代码与“材料”相同,也是生成5个等级(0,5-0.1)
'''
04数一数图片(人物图片)边框内+图形不相接
作者:AI对话大师、阿夏
时间:2024年4月28日 20:00
'''import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import os
import random
import time
from shapely.geometry import Polygon# 输入画布大小和要生成的图片数量
canvas_size =15
# int(input('请输入画布大小:15\n'))
num =int(input('请输入要生成的图片数量:100次\n'))# 提取的数量,尽量多一点刷100可能也只有8个图案
f=int(input('几份:2\n'))# 创建目录
output_dir = r'C:\Users\jg2yXRZ\OneDrive\桌面\数一数2\04自制框内不连接'
os.makedirs(output_dir, exist_ok=True)
# 统计每张图片出现的次数
image_count = {}
z='人物'pic_dir = fr'C:\Users\jg2yXRZ\OneDrive\桌面\数一数2\00幼儿图片\{z}'# 创建目录 end=output_dir+fr'\{pic_dir[-2:]}'
os.makedirs(end, exist_ok=True) # 获取文件夹中的所有文件
file_list = os.listdir(pic_dir)# 过滤出图片文件
image_files = [file for file in file_list if file.endswith('.png') or file.endswith('.jpg') or file.endswith('.jpeg')]# 构建图片文件的完整路径
# # 自制图片路径
animal_paths = [os.path.join(pic_dir, file) for file in image_files]
print(len(animal_paths))# 0.1缩放比例的范围,从0.1-0.6,01-01生成图案最多,0,1-0,5因为有大图占满了,所以小图数量会很少
fw=[]
# 倒过来的数字,数字越大图案大,数量少,难度越低
for y in range(5,0,-1):fw.append(f'0.{y}')
print(fw)
# 提取的数量,尽量多一点刷100可能也只有8个图案nn=1
# 几份?
for ff in fw: # 0.1-0.1print(f'0.1-{ff}')for ii in range(f): # 生成2份print(f'第{ii+1}份')# 图形尺寸范围 size_range = (0.1, float(ff)) # 图片尺寸范围(相对于画布大小的比例)# 创建画布fig, ax = plt.subplots(figsize=(canvas_size, canvas_size))ax.set_xlim([0, canvas_size])ax.set_ylim([0, canvas_size])shapes = [] # 存储已生成的图形# 随机生成指定数量的动物图片# for ii in range(num):rtencent_dir = output_dir+r'\零时'os.makedirs(tencent_dir, exist_ok=True)# 统计每张图片出现的次数image_count = {}for i in range(num): # 随机抽取6张# 随机选择动物图片animal_path = random.choice(animal_paths)img = mpimg.imread(animal_path)img_height, img_width = img.shape[:2]# 随机确定图片的大小和位置size = random.uniform(size_range[0], size_range[1]) * canvas_sizeposition_x = random.uniform(0, canvas_size - size)position_y = random.uniform(0, canvas_size - size)# 检查图片是否与其他图片不相交shape = Polygon([(position_x, position_y),(position_x + size, position_y),(position_x + size, position_y + size),(position_x, position_y + size)])if not any(shape.intersects(s) for s in shapes):# 添加图片到画布ax.imshow(img, extent=[position_x, position_x + size, position_y, position_y + size])shapes.append(shape)# 统计图片出现的次数if animal_path in image_count:image_count[animal_path] += 1else:image_count[animal_path] = 1 # 隐藏坐标轴ax.axis('off')# 打印每张图片出现的次数print("图片统计:")for image_path, count in image_count.items():print(f"{image_path}: {count}")# 保存图形output_path = os.path.join(tencent_dir, f'{ii:02d}.png')plt.savefig(output_path, dpi=200, bbox_inches='tight')# import time# time.sleep(2)shapes.clear()# 暂停3秒time.sleep(1)import osimport shutil# 获取123文件夹中的所有文件files = os.listdir(tencent_dir)# 遍历文件夹中的文件source_file_path = ""target_file_path = ""for file in files:# 构建源文件路径和目标文件路径source_file_path = os.path.join(tencent_dir, file)file=f'{nn:02d}.png'target_file_path = os.path.join(end, file)nn+=1# 剪切文件到目标文件夹shutil.move(source_file_path, target_file_path)# 清空画布和图形列表ax.cla()shapes.clear()# 关闭画布plt.close(fig)# # 删除文件夹
import shutil
shutil.rmtree(tencent_dir)