python写一段用一个文件夹内图片查找另一个文件内相似度为95%的图片,如果有新建一个文件夹按照第一个文件夹的图片顺序复制
时间: 2023-09-08 11:10:46 浏览: 83
以下是一个基于Python的实现,用于在一个文件夹内查找与另一个文件夹中相似度为95%的图片,并按照第一个文件夹的图片顺序复制到一个新建的文件夹中。
```python
import os
import shutil
import cv2
import numpy as np
# 定义图片文件夹路径
path1 = 'path/to/folder1'
path2 = 'path/to/folder2'
# 新建一个文件夹用于存储匹配到的图片
output_path = 'path/to/output_folder'
if not os.path.exists(output_path):
os.makedirs(output_path)
# 获取文件夹1中的所有图片文件名
files1 = [f for f in os.listdir(path1) if f.endswith('.jpg') or f.endswith('.jpeg') or f.endswith('.png')]
# 遍历文件夹1中的图片
for i, file1 in enumerate(files1):
# 构造文件路径
file1_path = os.path.join(path1, file1)
# 读取图片
img1 = cv2.imread(file1_path)
# 获取文件夹2中的所有图片文件名
files2 = [f for f in os.listdir(path2) if f.endswith('.jpg') or f.endswith('.jpeg') or f.endswith('.png')]
# 遍历文件夹2中的图片
for file2 in files2:
# 构造文件路径
file2_path = os.path.join(path2, file2)
# 读取图片
img2 = cv2.imread(file2_path)
# 计算图片相似度
similarity = np.sum(img1 == img2) / (img1.shape[0] * img1.shape[1] * 3)
# 如果相似度大于等于95%,则复制文件到新建的文件夹中,并按照文件夹1中的图片顺序进行命名
if similarity >= 0.95:
dst_path = os.path.join(output_path, f'{i+1}.jpg')
shutil.copy(file2_path, dst_path)
break
```
上述代码中,我们首先定义了两个文件夹的路径,并新建一个文件夹用于存储匹配到的图片。然后使用`os.listdir()`函数获取文件夹1中的所有图片文件名,并遍历这些图片。在遍历文件夹1中的图片时,我们使用`cv2.imread()`函数读取每张图片,并使用`os.listdir()`函数获取文件夹2中的所有图片文件名,再遍历文件夹2中的图片。在遍历文件夹2中的图片时,我们使用`cv2.imread()`函数读取每张图片,并使用NumPy库计算图片相似度。如果相似度大于等于95%,则使用`shutil.copy()`函数将文件复制到新建的文件夹中,并按照文件夹1中的图片顺序进行命名。
阅读全文