【教学类-55-05】20240516图层顺序挑战(三格长条纸加黑色边框、3*3、5张,不重复7186张,9坐标点颜色哈希值去重、保留5色)

背景需求:

前期测试了4*4框格种的8种颜色,随机抽取7种,随机排列图层,去掉相同的图片、保留7种颜色的图片,最后获得5400张样图

【教学类-55-04】20240515图层顺序挑战(四格长条纸加黑色边框、4*4、7张,不重复5400张,16坐标点颜色哈希值去重、保留7色)-CSDN博客文章浏览阅读543次,点赞8次,收藏14次。【教学类-55-04】20240515图层顺序挑战(四格长条纸加黑色边框、4*4、7张,不重复5400张,16坐标点颜色哈希值去重、保留7色)https://blog.csdn.net/reasonsummer/article/details/138907626

我想用同样的方法做以3*3的图层顺序,6种颜色抽5种,随机排列,去掉相同图片、保留5种颜色。最后获得186张样图

参考准备:

6的阶乘6*5*4*3*2*!=720个

一、生成所有图片

'''
图层重叠挑战(长矩形带黑框) (3*3抽取5) 一共有40320个不重复
作者:AI对话大师,阿夏
时间:2024年5月16日
'''
from PIL import Image, ImageDraw
import os,random
import itertoolsprint('--------1、制作图片-----------')
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条3条'folder_path = path + r'\01所有可能'
os.makedirs(folder_path, exist_ok=True)# # ["大红", "橙色", "黄色", "绿色", "青色", "蓝色", ]
colors = [(255, 0, 0), (255, 165, 0), (255, 255, 0), (0, 128, 0), (144, 238, 144), (135, 206, 235), (70, 130, 180), ]
# [("大红", (255, 0, 0)), ("橙色", (255, 165, 0)), ("黄色", (255, 255, 0)), ("中绿", ((0, 128, 0))), ("淡绿色", (144, 238, 144)), ("天蓝色", (135, 206, 235)), ("谈蓝色", (70, 130, 180)), ("紫红", (128, 0, 128)), ("粉红", (255, 192, 203))]from PIL import Image, ImageDraw
import os# folder_path=r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条\jpg4万'
# 创建画布
canvas_width = 800
canvas_height = 800
canvas_color = (255, 255, 255)  # 白色背景
line_color = (0, 0, 0)  # 黑色线条
line_width = 3
margin = 100  # 边距canvas = Image.new('RGB', (canvas_width, canvas_height), canvas_color)
draw = ImageDraw.Draw(canvas)# 计算单元格大小和绘制区域
num_rows = 3
num_cols = 3
cell_size = min((canvas_width - 2 * margin) // num_cols, (canvas_height - 2 * margin) // num_rows)
print(cell_size)start_x = (canvas_width - cell_size * num_cols) // 2
start_y = (canvas_height - cell_size * num_rows) // 2# 绘制第一行四个单元格的长度为红色的矩形,边框为10像素的黑色# 绘制所有单元格的矩形
# 绘制所有单元格的矩形
# for row in range(num_rows):
#     for col in range(num_cols):
#         x1 = start_x + col * cell_size
#         y1 = start_y + row * cell_size
#         x2 = x1 + cell_size
#         y2 = y1 + cell_size
#         draw.rectangle([(x1, y1), (x2, y2)], fill='white', outline=line_color, width=line_width)# 4行4列8条四格纸
#  第1行
def draw_h1_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_xy1 = start_yx2 = start_x + 3 * cell_sizey2 = start_y + 1 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[0], outline=line_color, width=line_width)#  第2行
def draw_h2_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_xy1 = start_y + 1 * cell_sizex2 = start_x + 3 * cell_sizey2 = start_y + 2 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[1], outline=line_color, width=line_width)#  第3行
def draw_h3_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_xy1 = start_y + 2 * cell_sizex2 = start_x + 3 * cell_sizey2 = start_y + 3 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[2], outline=line_color, width=line_width)#  第1列
def draw_l1_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_xy1 = start_yx2 = start_x + 1 * cell_sizey2 = start_y + 3 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[4], outline=line_color, width=line_width)#  第2列
def draw_l2_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_x + 1 * cell_sizey1 = start_yx2 = start_x + 2 * cell_sizey2 = start_y + 3 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[5], outline=line_color, width=line_width)#  第3列
def draw_l3_rectangle(start_x, start_y, cell_size, line_color, line_width):x1 = start_x + 3 * cell_sizey1 = start_yx2 = start_x + 2 * cell_sizey2 = start_y + 3 * cell_sizedraw.rectangle([(x1, y1), (x2, y2)], fill=colors[6], outline=line_color, width=line_width)import itertools
# 将函数名称提取出来并放入列表
function_names = ['draw_h1_rectangle','draw_h2_rectangle','draw_h3_rectangle','draw_l1_rectangle','draw_l2_rectangle','draw_l3_rectangle',]
# 生成所有可能的排列,是元祖()#
# 生成从 8 个元素中选取 6 个元素的所有可能排列,8个互相配对40320,6个互相配对也是40320
permutations = list(itertools.permutations(function_names, 6))
# print(permutations[0:10])# 打印排列数量
print(f"总共有 {len(permutations)} 种不同的排列。")
# 总共有 720 种不同的排列。n=1
# 打印所有排列
for permutation in permutations:    # 因为有40万个,所以先测试前20个# print(permutation)# 将元组转换为函数对象列表functions = [eval(function_name) for function_name in permutation[::-1]]# # 打印函数对象列表,一长串文字print(functions)# [<function draw_triangle_2 at 0x000001A4B402F3A8>, <function draw_triangle_1 at 0x000001A4B402FB88>, <function draw_triangle_6 at 0x000001A4B4061288>, <function draw_triangle_3 at 0x000001A4B23C5AF8>, <function draw_triangle_4 at 0x000001A4B4061168>, <function draw_triangle_5 at 0x000001A4B40611F8>]# 运行一个6元素,就打乱一次颜色,确保color【0】抽取的颜色每次都不同# random.shuffle(colors)# 调用函数绘制等边三角形# 调用函数绘制矩形for func in functions:# 为每个函数添加缺失的参数func(start_x, start_y, cell_size, line_color, line_width)# 保存绘制好的图像 已知是43020所以序号是5位数canvas.save(folder_path + fr'\{n:03d}.png')n+=1

12:39-12:40,生成720张图片

二、去掉重复

1、找到9个坐标点

代码展示

'''
目的:3*3检测文件内所有图片上9个坐标点的颜色,如果哈希值相同,就将图片复制到同名的哈希值文件内宝轮
作者:AI对话大师,阿夏
时间:2024年5月15日
'''
import os
import hashlib
from shutil import copyfile
from PIL import Imagepath = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条3条'
# 源文件夹路径
source_folder = path + r'\01所有可能'
# 目标文件夹路径
destination_folder = path + r'\02去掉重复'# 创建一个字典来存储哈希值和对应的图片路径
hash_dict = {}# 定义获取颜色值的函数
def get_color_values(image_path, coordinates):# 打开图片image = Image.open(image_path)# 存储获取到的颜色值列表color_values = []# 遍历坐标列表,获取对应坐标的颜色值for coordinate in coordinates:x, y = coordinate# 获取指定坐标的像素值pixel = image.getpixel((x, y))# 提取RGB颜色值r, g, b = pixel[:3]# 将颜色值添加到列表中color_values.append((r, g, b))return color_values# 遍历源文件夹中的每个文件
for filename in os.listdir(source_folder):filepath = os.path.join(source_folder, filename)# 处理图片文件if os.path.isfile(filepath) and (filename.endswith(".jpg") or filename.endswith(".png")):# 获取对应16个坐标的颜色值coordinates = [(200, 200), (400,200), (600,200),(200, 400), (400, 400), (600, 400), (200, 600), (400, 600), (600, 600),            ]color_values = get_color_values(filepath, coordinates)# 哈希计算hash_value = hashlib.md5(str(color_values).encode()).hexdigest()  # 使用MD5算法作为哈希函数print(hash_value)# 将哈希值和对应的图片路径存储到字典中if hash_value in hash_dict:hash_dict[hash_value].append(filepath)else:hash_dict[hash_value] = [filepath]# 遍历字典,复制图片到目标文件夹
for filepaths in hash_dict.values():for filepath in filepaths:filename = os.path.basename(filepath)hash_value = hashlib.md5(str(get_color_values(filepath, coordinates)).encode()).hexdigest()folder_path = os.path.join(destination_folder, hash_value)os.makedirs(folder_path, exist_ok=True)destination_filepath = os.path.join(folder_path, filename)copyfile(filepath, destination_filepath)print("图片已复制到对应的哈希值文件夹中")

1分钟左右

检测出230个文件,一共720张图。

三、把230个文件里面提取第一张图片

'''
复制哈希文件名内所有的第一张图片到新的列表内 3*3
作者:AI对话大师,阿夏
时间:2024年5月15日
'''
import os
import shutilpath = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条3条'output_folder = path+r'\02去掉重复'
new_folder = path+r'\03唯一230'
os.makedirs(new_folder, exist_ok=True)# 获取output_folder中的所有子文件夹
subfolders = [subfolder for subfolder in os.listdir(output_folder) if os.path.isdir(os.path.join(output_folder, subfolder))]# 遍历每个子文件夹,复制第一张图片到新文件夹
for subfolder in subfolders:subfolder_path = os.path.join(output_folder, subfolder)images = os.listdir(subfolder_path)if len(images) > 0:# 复制第一张图片first_image = images[0]source_path = os.path.join(subfolder_path, first_image)target_path = os.path.join(new_folder, first_image)shutil.copyfile(source_path, target_path)print("每个子文件夹的第一张图片已复制到文件夹: 03哈希16点颜色单张")

保留230个不重复的图片

四、去掉不是5个颜色的图片(5个纸条颜色+黑线白底=7色)

'''
目的:删除没有5种类颜色的色块(5色+2色黑白)3*3
作者:AI对话大师、阿夏
时间:2024年5月14日
'''
num=7
from PIL import Image
import osdef count_colors(image_path):image = Image.open(image_path)colors = image.getcolors()return len(colors)def remove_images_with_few_colors(folder_path, min_colors=num):image_files = [file for file in os.listdir(folder_path) if file.endswith(('.jpg', '.jpeg', '.png', '.gif'))]for image_file in image_files:image_path = os.path.join(folder_path, image_file)num_colors = count_colors(image_path)if num_colors < min_colors or num_colors > min_colors:os.remove(image_path)print(f"已删除颜色少于{min_colors}种的图片:{image_file}")print("处理完成。")path = r'C:\Users\jg2yXRZ\OneDrive\桌面\重叠纸条3条'
# 文件夹路径04图片总数8的阶乘
folder_path = path+r'\03唯一230'# 调用函数删除颜色数量少于8种的图片
remove_images_with_few_colors(folder_path, min_colors=num)

删完以后还剩186张。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python程序设计 文件处理(二)

实验十二 文件处理 第1关&#xff1a;读取宋词文件&#xff0c;根据词人建立多个文件 读取wjcl/src/step1/宋词.txt文件&#xff0c; 注意&#xff1a;宋词文件的标题行的词牌和作者之间是全角空格&#xff08;" ")可复制该空格 在wjcl/src/step3/cr文件夹下根据每…

【CSND博客纪念】“创作纪念日:从灵感迸发到小有成就——我的CSND博客创作之旅”

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

算法分析与设计复习__递归方程与分治

总结自&#xff1a;【算法设计与分析】期末考试突击课_哔哩哔哩_bilibili 1.递归&#xff0c;递归方程 1.1递归条件: 1.一个问题的解可以分解为几个子问题的解&#xff1b; 2.这个问题与分解之后的子问题&#xff0c;除了数据规模不同&#xff0c;求解思路完全一样; 3.存在…

【面试干货】一个数组的倒序

【面试干货】一个数组的倒序 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、实现思想 创建一个新的数组&#xff0c;然后将原数组的元素按相反的顺序复制到新数组中。 2、代码实现 package csdn;public class…

一个强大的在线解析网站,无需登录,只用把视频链接粘贴进去就能免费解析下载视频。

TiQu.cc是什么&#xff1f; TiQu.cc是一个强大的在线工具&#xff0c;让用户可以从包括Facebook、VK、Twitter、Tiktok、Instagram等在内的100多个平台下载他们喜爱的视频。不论是音乐、电视节目、电影、短片还是个人上传的内容&#xff0c;TiQu.cc都可以帮助您随时随地以离线…

ChatGPT 4o 使用案例之一

2024年GPT迎来重大更新&#xff0c;OpenAI发布GPT-4o GPT-4o&#xff08;“o”代表“全能”&#xff09; 它可以接受任意组合的文本、音频和图像作为输入&#xff0c;并生成任意组合的文本、音频和图像输出。它可以在 232 毫秒内响应音频输入&#xff0c;平均为 320 毫秒&…

把tif的值映射到shp栅格

目录 问题描述代码结果示例 问题描述 假如目前有一个&#xff08;多个&#xff09;tif文件和一个shp文件&#xff0c;想要把tif中每个像素的值集成到shp文件的新字段中。如果栅格和像素是一一对应的&#xff0c;问题将会变得非常简单&#xff1a;直接把每个像素的值映射到每个…

【Python探索之旅】字典

字典的基本特性 创建字典 修改字典 添加键值对 删除键值对 字典方法 遍历字典 完结撒花​ 前言 字典是 Python 中内建的一种具有弹性储存能力的数据结构&#xff0c;可存储任意类型对象&#xff0c;与序列使用整数索引不同&#xff0c;它使用键(key)进行索引。 通常任何不…

小白也会SQL:大模型改变交互方式(上)

在人工智能与自然语言处理交汇点&#xff0c;有一种技术正悄然改变与数据交互的方式——将日常语言转化为精准SQL查询。这一“text-to-sql”转换任务&#xff0c;使非专业人士也能轻松驾驭复杂的数据库操作&#xff0c;极大地拓宽了数据应用的边界。 然而&#xff0c;现有前沿…

linux系统查看服务器硬件信息

1、查看服务器型号、序列号 # dmidecode|grep "System Information" -A9 | egrep "Manufacturer|Product|Serial" 2、查看主板型号 # dmidecode |grep -A16 "System Information$" 或 dmidecode -t1 3、查看BIOS信息 # dmidecode -t bios 4、…

vue嵌套路由

一、嵌套 children配置 1.父类路由 mymusic 2.子类路由 musicson 1.创建MusicSon组件 <template><div><p>从前和后来</p><p>唯一</p><p>运气来的似有若无</p></div> </template><script>export defaul…

通俗易懂的策略模式讲解

什么是策略模式&#xff1f; 策略模式是一种设计模式&#xff0c;它允许你定义一系列的算法&#xff08;策略&#xff09;&#xff0c;并将每个算法封装成一个对象。这样&#xff0c;你可以轻松地切换不同的算法&#xff0c;而不需要改变原始代码。 一个简单的例子 假设你是…

这10款安卓APP,简直好用到爆!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频http://AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频 1.追书——追书神器 追书神器是小说追新大神&#xff0c;全网实…

摸鱼大数据——大数据导论

大数据导论 1、概念 大数据时代: 万物皆数据 ​ 数据概念: 人类的行为及产生的事件的一种记录称之为数据 ​ 数据价值: 对数据的内容进行深入分析&#xff0c;可以更好的帮助了解事和物在现实世界的运行规律 2、大数据诞生 大数据的诞生: 跟随着互联网的发展的,当全球互联…

K8S认证 | CKA题库 + 答案 | 查看Pod CPU资源使用量

2、查看集群中运行Pod CPU资源使用量 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node k8s …

拧紧设备或工具的选型原则、常见类型和选型关键因素有哪些?

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 在工业生产领域&#xff0c;拧紧控制是一项至关重要的工艺环节。它涉及螺栓、螺母等紧固件的装配过程&#xff0c;直接关系到产品的质量和性能。因此&#xff0c;选择合适的拧紧设备或工具对于确保拧紧过程的准确性和稳…

[牛客网]——C语言刷题day4

答案&#xff1a;B 解析&#xff1a; a是数组首元素的地址,a1的步长是int&#xff0c;所以是2 &a是数组的首地址&#xff0c;&a1步长是int[5] ptr是int类型的指针&#xff0c;指向a数组的尾后位置&#xff0c;ptr-1的步长是int,所以是a数组的最后一个元素5 答案&am…

如何使用ffmpeg 实现10种特效

相关特效的名字 特效id 特效名 1 向上移动 2 向左移动 3 向下移动 4 颤抖 5 摇摆 6 雨刷 7 弹入 8 弹簧 9 轻微跳动 10 跳动 特效展示(同时汇总相关命令) pad背景显示 pad背景透明 相关命令(一会再讲这些命令&#xff0c;先往下看) # 合成特效语音 ffmpeg -y -loglevel erro…

Element Plus/vue3 无限级导航实现

在使用element plus 时&#xff0c;最初要使用的就是导航组件了&#xff0c;官网上看到的也就是写死的一级/二级导航&#xff0c;那么如何设计一个无限级且动态的导航呢&#xff1f;毋庸置疑&#xff0c;递归。废话不多说&#xff0c;直接看代码和效果&#xff1a; 代码&#x…