乱序图片排序并重命名
说明与目的
说明
文件夹中存放着乱序的图片,图片名按照顺序排放!
以第一张图片为基准,将后面的图片依次与其计算两者的相似度进行排序!
实际应用中,避免不了相似度相同的值,因此,特意拷贝图片4和图片5
其中5和6是同一张图片,4和8是同一张图片
目的
我们希望得到的结果如下图
箭头指向是拷贝图片的副本
举例代码
key_list = ['Google', 'Runoob', 'Taobao', 'Baidu','Taobao1']
value_list = [0.3, 0.2 ,0.1 , 0.4 , 0.1]
# {'Google': 0.3, 'Runoob': 0.2, 'Taobao': 0.1, 'Baidu': 0.4, 'Taobao1': 0.1}
di = dict(zip(key_list,value_list)) # 字典生成
# print(di)
newvalue_list = value_list[:]
newvalue_list.sort()
# [0.1, 0.1, 0.2, 0.3, 0.4]
# print(newvalue_list)
newkey_list = []
for i in range(len(key_list)):
a = newvalue_list[i]
index =value_list.index(newvalue_list[i])
delete_key = key_list[index]
value_list.remove(a)
newkey_list.append(delete_key)
key_list.remove(delete_key)
# ['Taobao', 'Taobao1', 'Runoob', 'Google', 'Baidu']
# print(newkey_list)
如何计算两张图片的相似度
//伪代码 有空再补充
probability = detect_image(image_1, image_2)
最终代码
# 代码不完整,包含上述“detect_image”函数
# 导入相关模块
import numpy as np
import os
from PIL import Image
if __name__ == "__main__":
# 所有图片的地址放入这个列表中
img_path = []
# 后面所有图片与第一张图片相似度的值
value_list = []
# 与之对应的图片地址
key_list = []
# 对value_list按照从小到大的顺序进行排序
newvalue_list = []
# value_list排序后对应的图片地址
newkey_list = []
# 图片存放的地址
path = r"D:\bishe\chang\shunxu"
img_name = []
for i in sorted(os.listdir(path):
img_name.append(i)
character_path = os.path.join(path, i)
img_path.append(character_path)
# 以第1张为基准,故从第2张开始取
for i in range(1, len(img_path)):
# 第1张图片 即基准图片
image_1 = Image.open(img_path[0])
image_2 = Image.open(img_path[i])
probability = detect_image(image_1, image_2)
value_list.append(probability)
key_list.append(img_path[i])
# 生成字典 {图片地址:与基准图片的相似度}
di = dict(zip(key_list,value_list))
for j in range(len(di)):
# index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
index = value_list.index(newvalue_list[j])
# 当列表中有相同元素 即相似度列表value_list中有相同的相似度值时
# 使用 remove() 函数用于移除列表中某个值的第一个匹配项。
# 匹配到value_list排序后对应图片地址 时 就删掉
value_list.remove(newvalue_list[j])
# 先添加 在删掉
newkeys_list.append(key_list[index])
key_list.remove(key_list[index])
# 图片的重命名
# 图片的最终地址为path+"\mouren_"+num+".png"
# 如第2张图片为“D:\bishe\chang\shunxu\mouren_2.png”
# 其中num 从1开始
img_name1 = r"\mouren_"
img_name2 = ".png"
for j in range(len(newkey_list)):
name = newkeys_list[j]
num = j+2
new_name = path + img_name1 + num + img_name2
os.rename(name,new_name)