精华内容
下载资源
问答
  • Python人脸相似度对比

    2018-11-08 16:08:05
    Python直接使用模型,实现一个简易版的人脸对比,非常有趣!
  • 主要介绍了Python比较两个图片相似度的方法,涉及Python操作pil模块实现图片比较的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • python图片相似度比较

    千次阅读 2019-09-04 11:13:58
    #图片相似度比较 #方法零 from PIL import Image #计算图片hash值 def get_hash(img): img = img.resize((16, 16), Image.ANTIALIAS).convert('L') # 抗锯齿 灰度 avg = sum(list(img.getdata())) /...

    面向百度编程,收集的图片比较方法,可用于游戏辅助

    #图片相似度比较
    
    #方法零
    from PIL import Image
    
    #计算图片hash值
    def get_hash(img):
        img = img.resize((16, 16), Image.ANTIALIAS).convert('L')  # 抗锯齿 灰度
        avg = sum(list(img.getdata())) / 256  # 计算像素平均值
        s = ''.join(map(lambda i: '0' if i < avg else '1', img.getdata()))  # 每个像素进行比对,大于avg为1,反之为0
        return ''.join(map(lambda j: '%x' % int(s[j:j+4], 2), range(0, 256, 4)))
    
    #比较图片hash值
    def hamming(hash1, hash2, n=20):
        b = False
        assert len(hash1) == len(hash2)
        if sum(ch1 != ch2 for ch1, ch2 in zip(hash1, hash2)) < n:
            b = True
        return b
    
    
    for i in range(1,10):
        for j in range(1,10):
            im1=Image.open(r'F:\code\python\python\辅助\\'+str(i)+'.png')
            im2=Image.open(r'F:\code\python\python\辅助\\'+str(j)+'.png')
            c=hamming(get_hash(im1), get_hash(im2),5)
            print(str(i)+'-'+str(j)+'-'+str(c))
        print()
    
    
    '''
    #方法一:
    import imagehash
    from PIL import Image
    
    def diffimg(im1,im2):
        hash_size=20
        hash1 = imagehash.average_hash(im1, hash_size=hash_size)
        hash2 = imagehash.average_hash(im2, hash_size=hash_size)
        a = (1 - (hash1 - hash2) / len(hash1.hash) ** 2)
    
        return a
    
    for i in range(1,10):
        for j in range(1,10):
            im1=Image.open(r'F:\code\python\python\辅助\\'+str(i)+'.png')
            im2=Image.open(r'F:\code\python\python\辅助\\'+str(j)+'.png')
            c=diffimg(im1, im2)
            print(str(i)+'-'+str(j)+'-'+str(c))
        print()
    
    '''
    
    
    
    '''
    #方法二:
    from PIL import Image
    import math
    import operator
    from functools import reduce
    
    #把图像对象转换为直方图数据,存在list h1、h2 中
    def diff(image1,image3):
        h1=image1.histogram()
        h2=image3.histogram()
        result = math.sqrt(reduce(operator.add,  list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) )
        return result<10
        #sqrt:计算平方根,reduce函数:前一次调用的结果和sequence的下一个元素传递给operator.add
        #operator.add(x,y)对应表达式:x+y
        #这个函数是方差的数学公式:S^2= ∑(X-Y) ^2 / (n-1)
    
        #print(result)
        #result的值越大,说明两者的差别越大;如果result=0,则说明两张图一模一样
    
    for i in range(1,10):
        for j in range(1,10):
            im1=Image.open(r'F:\code\python\python\辅助\\'+str(i)+'.png')
            im2=Image.open(r'F:\code\python\python\辅助\\'+str(j)+'.png')
            c=diff(im1, im2)
            print(str(i)+'-'+str(j)+'-'+str(c))
        print()
    
    '''
    
    
    
    
    '''
    #方法三:
    from PIL import ImageGrab, Image
    import numpy as np
    import operator
    
    # 汉明距离判断两个图标是否一样
    def isMatch(im1, im2):
    
        # 缩小图标,转成灰度
        image1 = im1.resize((20, 20), Image.ANTIALIAS).convert("L")
        image2 = im2.resize((20, 20), Image.ANTIALIAS).convert("L")
    
        # 将灰度图标转成01串,即系二进制数据
        pixels1 = list(image1.getdata())
        pixels2 = list(image2.getdata())
    
        avg1 = sum(pixels1) / len(pixels1)
        avg2 = sum(pixels2) / len(pixels2)
        hash1 = "".join(map(lambda p: "1" if p > avg1 else "0", pixels1))
        hash2 = "".join(map(lambda p: "1" if p > avg2 else "0", pixels2))
    
        # 统计两个01串不同数字的个数
        match = sum(map(operator.ne, hash1, hash2))
        # 阀值设为10
        return match < 10
    for i in range(1,10):
        for j in range(1,10):
            im1=Image.open(r'F:\code\python\python\辅助\\'+str(i)+'.png')
            im2=Image.open(r'F:\code\python\python\辅助\\'+str(j)+'.png')
            c=isMatch(im1, im2)
            print(str(i)+'-'+str(j)+'-'+str(c))
        print()
    
    '''
    
    展开全文
  • 关于图片相似度,主要简单介绍以下几种方法: 一:通过图片像素来比较,比较简单,对使用场景有要求 二:通过余弦方法来比较图片 原理: 把图片表示一个向量,通过计算向量之间的余弦值来表征图片的相似度,个人认为...

    关于图片相似度,主要简单介绍以下几种方法:
    一:通过图片像素来比较,比较简单,对使用场景有要求

    二:通过余弦方法来比较图片
    原理: 把图片表示一个向量,通过计算向量之间的余弦值来表征图片的相似度,个人认为利用余弦定理来比较语义相似度要比图像相似度比较要好的多。
    [0,1],越大越相似

    三:SSIM(结构相似性指数)
    这种方法是基于sklearn中的scikit-image中的ssim来计算的一种全参考性的图像质量评价指标,分别从图像的亮度,对比度,结构三个方面度量图像的相似性
    [0,1]越大越相似



    四:直方图(以三通道直方图为例)
    原理:捕捉颜色信息的相似性,只要颜色分布相似,就判断两者相似度较高,不太合理

    展开全文
  • # 对比两幅图的指纹,计算汉明距离,即两个64位的hash值有多少是不一样的,不同的位数越小,图片越相似 # 汉明距离:一组二进制数据变成另一组数据所需要的步骤,可以衡量两图的差异,汉明距离越小,则相似度越高。...

    包含两种func;其中alll*使用了三种算法进行比对(比较耗时);two*使用了一种算法(推荐),速度较快;以下是代码;

    import cv2
    import numpy as np
    from PIL import Image
    import requests
    from io import BytesIO
    import matplotlib
    
    matplotlib.use('TkAgg')
    import matplotlib.pyplot as plt
    
    
    def aHash(img):
        # 均值哈希算法
        # 缩放为8*8
        img = cv2.resize(img, (8, 8))
        # 转换为灰度图
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # s为像素和初值为0,hash_str为hash值初值为''
        s = 0
        hash_str = ''
        # 遍历累加求像素和
        for i in range(8):
            for j in range(8):
                s = s + gray[i, j]
        # 求平均灰度
        avg = s / 64
        # 灰度大于平均值为1相反为0生成图片的hash值
        for i in range(8):
            for j in range(8):
                if gray[i, j] > avg:
                    hash_str = hash_str + '1'
                else:
                    hash_str = hash_str + '0'
        return hash_str
    
    
    def dHash(img):
        # 差值哈希算法
        # 缩放8*8
        img = cv2.resize(img, (9, 8))
        # 转换灰度图
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        hash_str = ''
        # 每行前一个像素大于后一个像素为1,相反为0,生成哈希
        for i in range(8):
            for j in range(8):
                if gray[i, j] > gray[i, j + 1]:
                    hash_str = hash_str + '1'
                else:
                    hash_str = hash_str + '0'
        return hash_str
    
    
    def pHash(img):
        # 感知哈希算法
        # 缩放32*32
        img = cv2.resize(img, (32, 32))  # , interpolation=cv2.INTER_CUBIC
        # 转换为灰度图
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 将灰度图转为浮点型,再进行dct变换
        dct = cv2.dct(np.float32(gray))
        # opencv实现的掩码操作
        dct_roi = dct[0:8, 0:8]
    
        hash = []
        avreage = np.mean(dct_roi)
        for i in range(dct_roi.shape[0]):
            for j in range(dct_roi.shape[1]):
                if dct_roi[i, j] > avreage:
                    hash.append(1)
                else:
                    hash.append(0)
        return hash
    
    
    def calculate(image1, image2):
        # 灰度直方图算法
        # 计算单通道的直方图的相似值
        hist1 = cv2.calcHist([image1], [0], None, [256], [0.0, 255.0])
        hist2 = cv2.calcHist([image2], [0], None, [256], [0.0, 255.0])
        # 计算直方图的重合度
        degree = 0
        for i in range(len(hist1)):
            if hist1[i] != hist2[i]:
                degree = degree + \
                         (1 - abs(hist1[i] - hist2[i]) / max(hist1[i], hist2[i]))
            else:
                degree = degree + 1
        degree = degree / len(hist1)
        return degree
    
    
    def classify_hist_with_split(image1, image2, size=(256, 256)):
        # RGB每个通道的直方图相似度
        # 将图像resize后,分离为RGB三个通道,再计算每个通道的相似值
        image1 = cv2.resize(image1, size)
        image2 = cv2.resize(image2, size)
        sub_image1 = cv2.split(image1)
        sub_image2 = cv2.split(image2)
        sub_data = 0
        for im1, im2 in zip(sub_image1, sub_image2):
            sub_data += calculate(im1, im2)
        sub_data = sub_data / 3
        return sub_data
    
    
    def cmpHash(hash1, hash2):
        # Hash值对比
        # 算法中1和0顺序组合起来的即是图片的指纹hash。顺序不固定,但是比较的时候必须是相同的顺序。
        # 对比两幅图的指纹,计算汉明距离,即两个64位的hash值有多少是不一样的,不同的位数越小,图片越相似
        # 汉明距离:一组二进制数据变成另一组数据所需要的步骤,可以衡量两图的差异,汉明距离越小,则相似度越高。汉明距离为0,即两张图片完全一样
        n = 0
        # hash长度不同则返回-1代表传参出错
        if len(hash1) != len(hash2):
            return -1
        # 遍历判断
        for i in range(len(hash1)):
            # 不相等则n计数+1,n最终为相似度
            if hash1[i] != hash2[i]:
                n = n + 1
        return n
    
    
    def getImageByUrl(url):
        # 根据图片url 获取图片对象
        html = requests.get(url, verify=False)
        image = Image.open(BytesIO(html.content))
        return image
    
    
    def PILImageToCV():
        # PIL Image转换成OpenCV格式
        path = "/Users/waldenz/Documents/Work/doc/TestImages/t3.png"
        img = Image.open(path)
        plt.subplot(121)
        plt.imshow(img)
        print(isinstance(img, np.ndarray))
        img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
        print(isinstance(img, np.ndarray))
        plt.subplot(122)
        plt.imshow(img)
        plt.show()
    
    
    def CVImageToPIL():
        # OpenCV图片转换为PIL image
        path = "/Users/waldenz/Documents/Work/doc/TestImages/t3.png"
        img = cv2.imread(path)
        # cv2.imshow("OpenCV",img)
        plt.subplot(121)
        plt.imshow(img)
    
        img2 = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
        plt.subplot(122)
        plt.imshow(img2)
        plt.show()
    
    
    def bytes_to_cvimage(filebytes):
        # 图片字节流转换为cv image
        image = Image.open(filebytes)
        img = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)
        return img
    
    
    def runAllImageSimilaryFun(para1, para2):
        # 均值、差值、感知哈希算法三种算法值越小,则越相似,相同图片值为0
        # 三直方图算法和单通道的直方图 0-1之间,值越大,越相似。 相同图片为1
        # t1,t2   14;19;10;  0.70;0.75
        # t1,t3   39 33 18   0.58 0.49
        # s1,s2  7 23 11     0.83 0.86  挺相似的图片
        # c1,c2  11 29 17    0.30 0.31
    
        if para1.startswith("http"):
            # 根据链接下载图片,并转换为opencv格式
            img1 = getImageByUrl(para1)
            img1 = cv2.cvtColor(np.asarray(img1), cv2.COLOR_RGB2BGR)
    
            img2 = getImageByUrl(para2)
            img2 = cv2.cvtColor(np.asarray(img2), cv2.COLOR_RGB2BGR)
        else:
            # 通过imread方法直接读取物理路径
            img1 = cv2.imread(para1)
            img2 = cv2.imread(para2)
    
        hash1 = aHash(img1)
        hash2 = aHash(img2)
        n1 = cmpHash(hash1, hash2)
        print('均值哈希算法相似度aHash:', n1)
    
        hash1 = dHash(img1)
        hash2 = dHash(img2)
        n2 = cmpHash(hash1, hash2)
        print('差值哈希算法相似度dHash:', n2)
    
        hash1 = pHash(img1)
        hash2 = pHash(img2)
        n3 = cmpHash(hash1, hash2)
        print('感知哈希算法相似度pHash:', n3)
    
        n4 = classify_hist_with_split(img1, img2)
        print('三直方图算法相似度:', n4)
    
        n5 = calculate(img1, img2)
        print("单通道的直方图", n5)
        print("%d %d %d %.2f %.2f " % (n1, n2, n3, round(n4[0], 2), n5[0]))
        print("%.2f %.2f %.2f %.2f %.2f " % (1 - float(n1 / 64), 1 -
                                             float(n2 / 64), 1 - float(n3 / 64), round(n4[0], 2), n5[0]))
    
        plt.subplot(121)
        plt.imshow(Image.fromarray(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)))
        plt.subplot(122)
        plt.imshow(Image.fromarray(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)))
        plt.show()
    
    
    def runtwoImageSimilaryFun(para1, para2):
        # 均值、差值、感知哈希算法三种算法值越小,则越相似,相同图片值为0
        # 三直方图算法和单通道的直方图 0-1之间,值越大,越相似。 相同图片为1
        # t1,t2   14;19;10;  0.70;0.75
        # t1,t3   39 33 18   0.58 0.49
        # s1,s2  7 23 11     0.83 0.86  挺相似的图片
        # c1,c2  11 29 17    0.30 0.31
    
        if para1.startswith("http"):
            # 根据链接下载图片,并转换为opencv格式
            img1 = getImageByUrl(para1)
            img1 = cv2.cvtColor(np.asarray(img1), cv2.COLOR_RGB2BGR)
    
            img2 = getImageByUrl(para2)
            img2 = cv2.cvtColor(np.asarray(img2), cv2.COLOR_RGB2BGR)
        else:
            # 通过imread方法直接读取物理路径
            img1 = cv2.imread(para1)
            img2 = cv2.imread(para2)
    
        hash1 = pHash(img1)
        hash2 = pHash(img2)
        n3 = cmpHash(hash1, hash2)
    
        n4 = classify_hist_with_split(img1, img2)
    
        return n3, n4
    
    
    if __name__ == "__main__":
        p1 = '/Users/Desktop/11/24.jpeg'
        p2 = '/Users/Desktop/11/25.jpeg'
        runAllImageSimilaryFun(p1, p2)

    展开全文
  • Python3通过OpenCV对比图片相似度

    万次阅读 多人点赞 2018-09-28 20:43:36
    一、环境配置 ...环境:Python3.7 运行命令: brew install opencv3 --with-python3 --c++11 --with-contrib 接着运行: brew link --force opencv3 现在测试下,结果如下: $ python3...

    一、环境配置

    参考:https://blog.csdn.net/willduan1/article/details/53898440
    环境:Python3.7
    运行命令:

    brew install opencv3 --with-python3 --c++11 --with-contrib
    

    接着运行:

    brew link --force opencv3
    

    现在测试下,结果如下:

    $ python3
    Python 3.7.0 (default, Jul 23 2018, 20:22:55) 
    [Clang 9.1.0 (clang-902.0.39.2)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import cv2
    >>> 
    

    二、图片对比

    代码如下:

    from skimage.measure import compare_ssim
    import cv2
    
    class CompareImage():
    
        def compare_image(self, path_image1, path_image2):
    
            imageA = cv2.imread(path_image1)
            imageB = cv2.imread(path_image2)
    
            grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
            grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
    
            (score, diff) = compare_ssim(grayA, grayB, full=True)
            print("SSIM: {}".format(score))
            return score
    
    
    compare_image = CompareImage()
    compare_image.compare_image("1.jpg", "2.jpg")
    

    图片资源:在这里插入图片描述
    在这里插入图片描述
    测试结果:

    SSIM: 0.36454305667390974
    
    展开全文
  • 对每一张图片生成一个“指纹”,通过比较两张图片的指纹,来判断他们的相似度,是否属于同一张图片。 主要通过比较汉明距离来比较图片,值越小,越相似 1:均值哈希算法(Average hash algorithm) 基于比较灰度...
  • python OpenCV 图片相似度 5种算法

    万次阅读 多人点赞 2019-05-17 15:28:34
    原始两张图片: 代码运行结果如下。 5种算法 值哈希算法、差值哈希算法和感知哈希算法都是值越小,相似度越高,取值为0-64,即汉明距离中,64位的hash值有多少不同。 三直方图和单通道直方图的值为0-1,值越...
  • 这篇文章主要介绍了python Opencv计算图像相似度过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一、相关概念 一般我们人区分谁是谁,给物品分类,都...
  • Python】 比较图片相似度

    千次阅读 2018-10-15 20:18:34
    #将img表示的图片对象拷贝到region中,这个region可以用来后续的操作(region其实就是一个 #image对象,box是个四元组(上下左右))   def hist_similar(lh, rh):  assert len(lh) == len(rh)  return sum...
  • python 人脸对比--百度API人脸相似度识别(超简单)

    万次阅读 多人点赞 2019-03-23 22:08:56
    说明:这篇是写使用百度人脸识别API进行人脸相似度识别对比,如 给两个人物照片,判断是否是同一个人。简单的4步完成。 1,获取百度人脸识别API的API Key和Secret Key。 使用百度账号登录百度AI平台,网址:...
  • Python计算图片之间的相似度

    万次阅读 多人点赞 2018-11-17 16:39:05
    图片表示成一个向量,通过计算向量之间的余弦距离来表征两张图片相似度 # -*- coding: utf-8 -*- # !/usr/bin/env python # @Time : 2018/11/17 14:52 # @Author : xhh # @Desc : 余弦相似度计算 # @File ...
  • /usr/bin/python # -*- coding: UTF-8 -*- import cv2 import os # 均值哈希算法 def aHash(img): # 缩放为8*8 img = cv2.resize(img, (8, 8), interpolation=cv2.INTER_CUBIC) # 转换为灰度图 gray = cv2....
  • 该压缩包包含编译方式,示例代码,只需拍两张图片即可比较,比较打印输出值小于10,即为相似图片。使用改代码的用户linux系统必须先安装opencv环境.
  • 主要介绍了使用Python的PIL模块来进行图片对比的方法,搜索引擎最基本的图片搜索也是利用图片颜色值的对比来实现的,需要的朋友可以参考下
  • 图片相似度对比

    千次阅读 2019-05-28 21:49:12
    文章给出了两种方法,可以计算两张图片相似度 参考文章:https://blog.csdn.net/xundh/article/details/78255037 方法一: from PIL import Image import glob import os class CompareImage(): def calculate...
  • Python图像识别,图片相似度计算!

    千次阅读 2019-08-29 16:23:53
    要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等......对应的风景照是蓝天还是大海......做一系列的分类。 从机器学习的的角度来说,首先要提取图片的特征,将这些特征进行分类处理,...
  • Python实现一个简单的——人脸相似度对比

    万次阅读 多人点赞 2018-11-08 15:58:58
    近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。...今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣! 整体思路: 1、预先导入...
  • python计算图片相似度

    千次阅读 2019-05-17 14:24:21
    python计算图片相似度计算方法完整代码测试 这里需要用到PIL,如果没有安装PIL,需要先pip install PIL 计算方法 一、将图片缩放为10×10(缩放比例因图片大小而异) 二、读取每一点灰度化后的像素 三、计算...
  • 要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等......对应的风景照是蓝天还是大海......做一系列的分类。 从机器学习的的角度来说,首先要提取图片的特征,将这些特征进行分类处理,...
  • 使用几种技术的Python图像相似度比较 要求: sudo apt-get install -y python-pip sudo pip install PIL numpy 用法 将脚本保存到与主脚本相同的文件夹中 从脚本导入功能 from image_similarity import similarity...
  • Python-列表删除重复元素/图像相似度判断及删除相似图像 python 图像相似 phash和compare_ssim比较 因为输入是视频,切完帧之后都是连续图片,所以主要参考第一篇博客的第一种方法。我的目录结构如下: 其中frame_...
  • # Hash值对比 def cmpHash(hash1, hash2,shape=(10,10)): n = 0 # hash长度不同则返回-1代表传参出错 if len(hash1)!=len(hash2): return -1 # 遍历判断 for i in range(len(hash1)): # 相等则n计
  • python 比较 2张图片相似度

    万次阅读 2018-10-09 15:02:44
    /usr/bin/python # -*- coding: UTF-8 -*- import cv2 import numpy as np #均值哈希算法 def aHash(img): #缩放为8*8 img=cv2.resize(img,(8,8),interpolation=cv2.INTER_CUBIC) #转换为灰度图 gray=cv2.cvtC....
  • 计算图片相似度的应用很广泛,如google、baidu、360等搜索引擎以图搜图的功能就是其典型应用 相似图像去重一般分为如下两个步骤 1、图像特征表达的提取 2、图像之间相似度计算两个主要步骤。 对于图像特征表达的...
  • 第一部分:截取目标图片并保存 # 导入相关的库 from PIL import Image # 打开一张图 img = Image.open(r'D:\Test_Data\main_map\10.png') # 图片尺寸 img_size = img.size h = img_size[1] # 图片高度 w = img_...
  • 目前所用的自动化框架是基于java写的,所以下载该缺口图片的代码也是java代码,后续的图片识别对比是基于python String yzmPath="D:\\yanzhengma.png"; // wd为webdriver对象 TakesScreenshot takesScreenshot=...
  • python 比较两张图片相似度

    千次阅读 2018-11-13 18:54:05
    以上代码实现的功能是先读取两张图片,然后比较两张图片的相似程度,当两张图片相似度为0 时,运行到imgocr行时 imgocr 为 nan 会报错 numpy\lib\function_base.py:3183: RuntimeWarning: invalid value ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,685
精华内容 1,074
关键字:

python图片相似度对比

python 订阅