去除目录下重复图片(去重)
训练集图片有太多重复图片,于是需要去重
import cv2
import os
from collections import defaultdict
def dhash(image, hash_size=8):
"""
计算图片的差异哈希值
"""
# 调整图片大小,并多加一列以便计算水平梯度
resized = cv2.resize(image, (hash_size + 1, hash_size))
# 计算相邻列像素之间的相对水平梯度
diff = resized[:, 1:] > resized[:, :-1]
# 将差异图片转换为哈希值
return sum([2 ** i for (i, v) in enumerate(diff.flatten()) if v])
def find_duplicates(folder_path):
"""
找到文件夹中的重复图片
"""
hashes = defaultdict(list)
duplicates = []
# 遍历文件夹中的图片文件
for filename in os.listdir(folder_path):
if filename.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
filepath = os.path.join(folder_path, filename)
image = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)
if image is None:
continue
h = dhash(image)
hashes[h].append(filepath)
# 找到哈希值相同的图片
for h, files in hashes.items():
if len(files) > 1:
duplicates.append(files[1:]) # 保留每组重复图片中的第一张,记录其余的图片
return duplicates
def delete_duplicates(folder_path):
"""
删除文件夹中的重复图片,只保留每组中的一张
"""
duplicates = find_duplicates(folder_path)
for group in duplicates:
for file in group:
os.remove(file)
print(f"已删除重复文件: {file}")
if __name__ == "__main__":
folder_path = "./data" # 替换为你的图片文件夹路径,图片名不要带中文
delete_duplicates(folder_path)
本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18223875