• python之图片指纹(唯一性的)


    介绍

    每张图片都有一个唯一性的指纹。就好像人类的指纹可以识别出这个人类似。

    图片指纹是什么?(图片哈希)

    • 用图片指纹进行相似图片的检测。这种技术通常被称为“感知图像hash”或是简单的“图片hash”。
    • 图片hash是检测一张图片的内容然后根据检测的内容为图片建立一个唯一值的过程。
    • 比如,给定一张图片作为输入,应用一个hash函数,然后基于图片的视觉计算出一个图片hash。相似的图片也应当有相似的hash值。
    • 将会使用“差别Hash”或简单的DHash算法计算图片指纹。简单来说,DHash算法着眼于两个相邻像素之间的差值。然后,基于这样的差值,就建立起一个hash值了。

    为什么不使用md5,sha-1等算法?

    我们不能在实现中使用加密hash算法。由于加密hash算法的本质使然,输入文件中非常微小的差别也能造成差异极大的hash值。我们实际上希望相似的输入可以有相似的hash输出值。

    安装相关库

    pip install Pillow
    pip install ImageHash
    pip install numpy
    pip install scipy
    

    开始使用

    获取图片指纹

    from PIL import Image
    import imagehash
    
    # 给一张图片
    img1 = Image.open('images/demo4.jpg')
    res = imagehash.dhash(img1) # 4f999cc90979704c
    

    计算汉明距离

    汉明距离被用于计算一个哈希中的不同位数。因此,哈希中只有一位不同的两张图片自然比有10位不同的图片更相似。

    全部代码

    from PIL import Image
    
    import imagehash
    
    
    def img(img_path):
        """
        图片哈希(类似:4f999cc90979704c)
        :param img_path: 图片路径
        :return: <class 'imagehash.ImageHash'>
        """
        img1 = Image.open(img_path)
        res = imagehash.dhash(img1)
        return res
    
    
    def hamm_img(res1, res2):
        """
        汉明距离,汉明距离越小说明越相似,等 0 说明是同一张图片,大于10越上,说明完全不相似
        :param res1:
        :param res2:
        :return:
        """
        str1 = str(res1)  # <class 'imagehash.ImageHash'> 转成 str
        str2 = str(res2)
        num = 0  # 用来计算汉明距离
        for i in range(len(str1)):
            if str1[i] != str2[i]:
                num += 1
        return num
    
    
    if __name__ == '__main__':
        img_path1 = 'images/demo1.jpg'
        img_path2 = 'images/demo2.jpg'
        res = hamm_img(img(img_path1), img(img_path2))
        print('汉明距离是:', res)
    
    
  • 相关阅读:
    树莓派开发实战(第2版)
    Windows 7+Office 2010综合应用培训教程
    Adobe Edge Animate CC
    从零开始学采购:供应商管理与采购过程控制
    iOS项目开发全程实录
    SEO搜索引擎实战详解
    Photoshop移动UI设计完全实例教程
    游戏开发物理学
    psd,
    放到 userdefault,而不是 cache里面,
  • 原文地址:https://www.cnblogs.com/zhenzi0322/p/12889690.html
Copyright © 2020-2023  润新知