我正在构建一个有助于查找重复图像的工具。要利用bktree,我需要使用位散列,但是,最好将较大的位散列压缩为较小的十六进制散列进行存储。
位哈希看起来像这样:
dhash_bits = 19965419413067491224447942902196404479
位哈希的十六进制哈希如下所示:
dhash_hex = 0f05332d4d0b471500007722dc7300ff
我尝试使用bin(int(dhash_hex,16))
将十六进制哈希值转换回位,但是我知道这不是正确的方法。
将十六进制哈希转换回位哈希的正确方法是什么?
这是将位转换为十六进制的函数:
def format_hex(row_hash, col_hash, size=8):
hex_length = size * size // 4
return '{0:0{2}x}{1:0{2}x}'.format(row_hash, col_hash, hex_length)
答案 0 :(得分:2)
您的dhash_bits
只是一个单个整数;相应的dhash_hex
值也可以通过
dhash_hex = format(dhash_bits, '032x')
大概是您使用dhash_int()
function来获取的。
然后进行逆运算只是将十六进制转换回整数:
dhash_bits = int(dhash_hex, 16)
您的format_hex()
函数将行和列哈希的两个数字合并为一个字符串;您将int()
应用于每一半,再次得到两个单独的数字:
row_hash = int(dhash_hex[:len(dhash_hex) // 2], 16)
col_hash = int(dhash_hex[len(dhash_hex) // 2:], 16)