Python中zfill方法的解释

2024-10-02 14:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用ImageHash模块来获取图像的哈希值。我有这个代码:

hashSize = 8
imghash3 = []
image = "pic1.jpg"

imghash1 = imagehash.phash(Image.open(image))
print(imghash1)
>>>d1d1f1f3f3737373
imghash2 = str(imagehash.phash(Image.open(image), hashSize))
print(imghash2)
>>>11b97c7eb158ac
imghash3.append(bin( int(imghash2, 16))[2:].zfill(64))
print(imghash3)
>>>['0000000000010001101110010111110001111110101100010101100010101100']

因此imagehash1是该模块的基本用法。在

现在我不明白的是hashSizeimagehash2中的原始字符串进行了什么样的转换,以及第三个函数如何将imagehash2转换为64位字符串。在


Tags: 模块字符串图像imageopenprintphashimagehash
1条回答
网友
1楼 · 发布于 2024-10-02 14:22:01

phash计算期间,原始图像将调整大小。hashSize参数基本上控制调整后图像的高度和宽度。在

算法可以找到here。实施第一步(缩小规模):

image = image.convert("L").resize((hash_size, hash_size), Image.ANTIALIAS)

参见^{}的来源


让我们看看imghash3.append(bin( int(imghash2, 16))[2:].zfill(64))行的作用。在

^{pr2}$

首先,它将十六进制字符串转换为整数

In [17]: int(imghash2, 16)
Out[17]: 4989018956716204

内置的^{}函数用于将整数转换为二进制字符串

In [18]: bin( int(imghash2, 16))
Out[18]: '0b10001101110010111110001111110101100010101100010101100'

使用list slice删除前两个字符

In [19]: bin( int(imghash2, 16))[2:]
Out[19]: '10001101110010111110001111110101100010101100010101100'

在左边的Adds ^{}来生成总共64个字符的字符串

In [20]: bin( int(imghash2, 16))[2:].zfill(64)
Out[20]: '0000000000010001101110010111110001111110101100010101100010101100'

相关问题 更多 >