实现多张图片对比1

from PIL import Image
import math
import operator
from functools import reduce
import os


def image_contrast(img1, img2):
    """ 来源虫师,----准确度不是很高
    :param img1:对比的图片1
    :param img2: 对比的图片2
    :return: 得到的数值越大说明差距越大,数值越小越相近,为0.0时说明图片一样
    """

    image1 = Image.open(img1)
    image2 = Image.open(img2)

    # 把图像对象转换为直方图数据,存在list、h1、h2中
    h1 = image1.histogram()
    h2 = image2.histogram()

    result = math.sqrt(reduce(operator.add,  list(map(lambda a, b: (a-b)**2, h1, h2)))/len(h1))
    '''
    sqrt:计算平方根,reduce函数:前一次调用的结果和sequence的下一个元素传递给operator.add
    operator.add(x,y)对应表达式:x+y
    这个函数是方差的数学公式:S^2= ∑(X-Y) ^2 / (n-1)
    '''
    return result

def compare_many_pic(sour_img_dir,dest_img_dir):
    """
    :param sour_img_dir:源图片目录
    :param dest_img_dir: 对比图片目录
    :return:   每一个源图片和所有的对比图片相对比
    """
    data1 = []  # 存放源图片
    data2 = []  # 存放被对比的图片
    data3 = {}  # 存放相似度较高的对比结果
    if os.path.isdir(sour_img_dir):   # 判断是否为目录
        s_img = os.listdir(sour_img_dir)    # 遍历目录下的图片
        for i in s_img:
            if i.endswith(".jpg") or i.endswith(".png"):   # 查找后缀是.png或.jpg的图片
                data1.append(i)
        print("源图片为:%s" % data1)    # 打印源图片
    else:
        print("给定的源图片不存在")

    if os.path.isdir(dest_img_dir):
        d_img = os.listdir(dest_img_dir)
        for i in d_img:
            if i.endswith(".jpg") or i.endswith(".png"):
                data2.append(i)
        print("对比图片是:", data2)    # 打印对比图片
    else:
        print("给定的对比图片不存在")
    for i in data1:  # 源图片
        for k in data2:  # 对比图片
            result = image_contrast(sour_img_dir+"\\"+i, dest_img_dir+"\\"+k)
            if result <= 5.0:
                print("\033[1;36m 源-{0}-和对比-{1}-的相识度较高,对比结果: {2}\033[0m".format(i, k, result))
                data3["源" + i] = ["对比" + k, int(result)]
            else:
                print("{0}和{1}的对比结果: {2}".format(i, k, result))
    print("\033[1;36m 相识度较高的有:{0}\033[0m".format(data3))


if __name__ == '__main__':
    sour_img_dir = r"C:\Users\html_\Pictures\Saved Pictures"           # 源图片目录
    dest_img_dir = r"C:\Users\html_\Pictures\Saved Pictures\百度图片"   # 对比图片目录
    compare_many_pic(sour_img_dir, dest_img_dir)

本文主要代码来源于虫师,我只是写了一些多张图片对比的逻辑代码

关于Pillow库的详细文档:

http://pillow.readthedocs.org/en/latest/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值