python读取一个文件夹中的图片,每读取一张都要计算其均值哈希值,并与前面每图片的均值哈希值比较,如果哈希值差值小于5,则认为它们相同,选其一保留
时间: 2024-03-14 13:42:54 浏览: 109
可以使用Python的Pillow库来读取图片,并使用imagehash库计算图片的均值哈希值。代码示例如下:
```python
from PIL import Image
import os
import imagehash
# 定义计算哈希值的函数
def get_hash(file):
with Image.open(file) as img:
hash = imagehash.average_hash(img)
return hash
# 定义比较哈希值的函数
def compare_hash(hash1, hash2):
return abs(hash1 - hash2) < 5
# 定义要处理的文件夹路径
folder_path = '/path/to/folder'
# 初始化哈希值列表和已保留文件名列表
hashes = []
reserved_files = []
# 遍历文件夹中的文件
for file_name in os.listdir(folder_path):
# 判断是否为图片文件
if file_name.endswith('.jpg') or file_name.endswith('.png'):
file_path = os.path.join(folder_path, file_name)
# 计算当前文件的哈希值
cur_hash = get_hash(file_path)
# 遍历已保留文件的哈希值,比较与当前文件的哈希值的差值
is_duplicate = False
for hash in hashes:
if compare_hash(cur_hash, hash):
is_duplicate = True
break
# 如果不是重复文件,则保留该文件,并将其哈希值加入哈希值列表
if not is_duplicate:
reserved_files.append(file_name)
hashes.append(cur_hash)
print(reserved_files)
```
这段代码会遍历指定文件夹中的所有图片文件,计算每个文件的均值哈希值,并比较其与前面已保留文件的哈希值。如果哈希值差值小于5,则认为它们相同,选其一保留。最终输出保留的文件名列表。注意:由于哈希值可能会重复,因此保留的文件数量可能小于原始文件数量。
阅读全文