python脚本实现筛选图片数据集中重复内容超过90%的图像,
时间: 2024-04-10 17:26:46 浏览: 145
您可以使用图像哈希算法来实现筛选图片数据集中重复内容超过90%的图像。图像哈希算法可以将图像转换为一个具有固定长度的哈希值,通过比较哈希值的差异来判断图像之间的相似度。
以下是一个使用平均哈希算法(Average Hash)的示例代码:
```python
from PIL import Image
def average_hash(image, hash_size=8):
# 缩放图像为指定的尺寸
image = image.resize((hash_size, hash_size), Image.ANTIALIAS)
# 转换为灰度图像
image = image.convert("L")
# 计算像素平均值
pixels = list(image.getdata())
avg = sum(pixels) / len(pixels)
# 根据像素平均值生成哈希值
hash_value = ''.join(['1' if pixel > avg else '0' for pixel in pixels])
return hash_value
def hamming_distance(hash1, hash2):
# 计算两个哈希值之间的汉明距离
return sum([char1 != char2 for char1, char2 in zip(hash1, hash2)])
def find_duplicate_images(image_folder, threshold=90):
image_hash_dict = {}
duplicate_images = []
for image_file in image_folder.glob('*.jpg'): # 遍历图片文件夹中所有的jpg文件
image = Image.open(image_file)
image_hash = average_hash(image)
for existing_hash, existing_image in image_hash_dict.items():
distance = hamming_distance(image_hash, existing_hash)
if distance < threshold:
duplicate_images.append((image_file, existing_image))
break
image_hash_dict[image_hash] = image_file
return duplicate_images
# 使用示例
image_folder = Path('your_image_folder') # 替换为你的图片文件夹路径
duplicate_images = find_duplicate_images(image_folder, threshold=90)
# 打印重复的图片对
for image1, image2 in duplicate_images:
print(f"Duplicated images: {image1} and {image2}")
```
请确保在运行代码之前安装了`Pillow`库(可以使用`pip install Pillow`进行安装)。代码中,`find_duplicate_images`函数使用了平均哈希算法来计算图像的哈希值,并通过比较哈希值之间的汉明距离来判断图像之间的相似度。最后,将重复的图片对打印出来。
注意:上述代码只适用于处理JPEG格式的图像文件。如果你的图片格式不同,可能需要进行相应的调整。
阅读全文