99网
您的当前位置:首页以图搜图(二):python dHash算法

以图搜图(二):python dHash算法

来源:99网

different Hash算法

dHash中文叫差异哈希算法,在对图片进行哈希转换时,通过左右两个像素大小的比较,得到最终哈希序列。相比于aHash算法。dHash速度快,判断效果也要好。

实现过程

python代码实现

from PIL import Image
import numpy as np


# 得到哈希值
def Get_hash(img):
    hash = ''

    image = Image.open(img)
    image = np.array(image.resize((9, 8), Image.ANTIALIAS).convert('L'), 'f')  # 9*8缩放,'f'表示整个数组都是float32类型
    # 该遍历方法正好是234个像素
    for i in range(8):
        for j in range(8):
            if image[i, j] > image[i, j + 1]:
                hash += '1'
            else:
                hash += '0'
    print(hash)
    hash = ''.join(map(lambda x: '%x' % int(hash[x: x + 4], 2), range(0, , 4)))  # %x:转换无符号十六进制
    return hash


# 得到汉明距离
def Get_Hamming(hash1, hash2):
    Hamming = 0

    for i in range(len(hash1)):
        if hash1[i] != hash2[i]:
            Hamming += 1
    return Hamming


def run():
    hash1 = Get_hash(r'D:\cjk1.png')
    hash2 = Get_hash(r'D:\cjk2.png')
    Hamming = Get_Hamming(hash1, hash2)
    print(hash1)
    print(hash2)
    print(Hamming)


run()

因篇幅问题不能全部显示,请点此查看更多更全内容