python写一段用一个文件夹内图片查找另一个文件内相似度为95%的图片,如果有新建一个文件夹按照第一个文件夹的图片顺序复制第一个文件夹内图片
时间: 2023-09-02 10:12:39 浏览: 120
好的,我能理解你的问题。下面是一种可能的实现方式:
```python
import os
import shutil
import cv2
import numpy as np
# 定义相似度阈值
threshold = 0.95
# 定义两个文件夹的路径
folder1_path = 'folder1/'
folder2_path = 'folder2/'
# 获取第一个文件夹内的所有图片文件名
folder1_files = os.listdir(folder1_path)
folder1_files = [f for f in folder1_files if f.endswith('.jpg') or f.endswith('.png')]
# 获取第二个文件夹内的所有图片文件名
folder2_files = os.listdir(folder2_path)
folder2_files = [f for f in folder2_files if f.endswith('.jpg') or f.endswith('.png')]
# 遍历第一个文件夹内的所有图片
for i, f1 in enumerate(folder1_files):
print(f'正在处理第{i+1}张图片: {f1}')
# 加载当前图片
img1 = cv2.imread(os.path.join(folder1_path, f1))
# 遍历第二个文件夹内的所有图片
for f2 in folder2_files:
# 加载当前图片
img2 = cv2.imread(os.path.join(folder2_path, f2))
# 计算当前图片的相似度
similarity = np.sum(img1 == img2) / (img1.shape[0] * img1.shape[1])
# 如果相似度大于阈值,则复制当前图片到新文件夹
if similarity >= threshold:
print(f'发现相似度为{similarity:.2f}的图片: {f2}')
shutil.copy(os.path.join(folder2_path, f2), f'new_folder/{f1}')
# 处理完当前图片后跳出内部循环
break
```
上述代码首先定义了相似度阈值 `threshold`,然后分别获取了两个文件夹内的所有图片文件名。接下来,遍历了第一个文件夹内的所有图片,并在内部循环中遍历了第二个文件夹内的所有图片,计算了它们的相似度。如果相似度大于等于阈值,则将第二个文件夹中的当前图片复制到新文件夹中,并将其命名为第一个文件夹中对应的图片文件名。注意,这里只复制了第一张相似的图片,如果第二个文件夹内有多张相似的图片,只会复制第一张。
阅读全文