Python查找文件夹中相同图片

选定一张图片与文件夹中的其他图片进行SSIM对比,每张图片进行完一轮对比后从列表中删除,减少计算量。

import os,cv2
from skimage.measure import compare_ssim
import numpy as np
import time
from PIL import Image,ImageChops

#采用SSIM进行对比,速度会较慢
def found_same_img(path):
    dir_list=[]
    for img_name in os.listdir(path):
        img_dir=path+img_name
        dir_list.append(img_dir)
    print(len(dir_list))
    for No,img_dir in enumerate(dir_list):
        img=cv2.imread(img_dir)
        img=cv2.resize(img,dsize=(50,50))
        print(No)
        i=0
        for other_img_dir in dir_list[No+1:]:
            i+=1
            other_img=cv2.imread(other_img_dir)
            other_img=cv2.resize(other_img,dsize=(50,50))
            ssim=compare_ssim(img,other_img,multichannel=True)
            if str(ssim)==str(1.0):
                print(img_dir,'----',other_img_dir)
        # print('次数:',i)

#采用PIL中的Imagecrops进行对比,速度会快上很多
def found_same_img_2(path):
    dir_list=[]
    for img_name in os.listdir(path):
        img_dir=path+img_name
        dir_list.append(img_dir)
    print('共:',len(dir_list),'张')
    for No,img_dir in enumerate(dir_list):
        # start=time.time()
        img=Image.open(img_dir).resize((100,100))
        i=0
        for other_img_dir in dir_list[No+1:]:
            i+=1
            # other_img=cv2.imread(other_img_dir)
            other_img =Image.open(other_img_dir).resize((100,100))
            # print(img_dir,other_img_dir)
            try:
                diff=ImageChops.difference(img,other_img)
                if diff.getbbox() is None:
                    print('Same:',img_dir, '----', other_img_dir)
            except:
                print('报错,图片不匹配:',img_dir, '----', other_img_dir)
                continue
        # finish=time.time()
        # print(No,'  Time:',round((finish-start),2))
        print('次数:',i)


if __name__ == '__main__':
	path='D:\\img\\'
	found_same_img(path)

你可能感兴趣的:(Python查找文件夹中相同图片)