gpt4 book ai didi

python - 两个相同的图像具有不同的哈希值无法弄清楚为什么

转载 作者:行者123 更新时间:2023-12-05 04:39:55 26 4
gpt4 key购买 nike

我有一个目录,里面有一张棒球图片,图片是 1.jpg。我使用 cv2 读入图像。然后,我定义了一个路径,将图像写回到与 2.jpg 相同的目录中。所以 1.jpg 和 2.jpg 是相同的。然后对于每个图像,我使用函数 get_hash 计算长度为 256 的“差异”散列。然后我打印出每张图片的哈希值。它们几乎相同,但至少有 1 位不同。想不通为什么。认为这可能是由于复制图像时的 JPG 压缩,所以我也为两个图像使用 png 格式运行代码,但仍然得到不同的哈希值。任何见解将不胜感激。代码如下所示

def get_hash(fpath, hash_length):
dim = int(math.sqrt(hash_length)) # with hash_length=256 dim=16
r_str=''
img=cv2.imread(fpath,0) # read image as gray scale image
img=cv2.resize(img, (dim,dim), interpolation = cv2.INTER_NEAREST)
img=img.flatten() # now a 256 bit vector
list2=list(img)
for col in range (0,len(list2)-1):
if(list2[col]>list2[col+1]):
value='1'
else:
value='0'
r_str=r_str + value
return r_str

def match(value1, value2, distance):
# returns True is the number of mismatches in the hashes is less than distance
# with distance=0 returns True only if hashes are identical
mismatch_count=0
for i in range(0,len(value1) ):
if value1[i] !=value2[i]:
mismatch_count +=1
if mismatch_count>distance:
return False
else:
return True

path_to_image=r'C:\Temp\balls\dup3\1.jpg'
img=cv2.imread(path_to_image)
path_to_write_image=r'C:\Temp\balls\dup3\2.jpg'
cv2.imwrite(path_to_write_image, img) # write the identical image to directory with file name 2.jpg
hash_length = 256
h1=get_hash(path_to_image, hash_length)
h2=get_hash(path_to_write_image, hash_length)
print (h1)
print (h2)
distance = 0 # both hashes must match identically
m = match(h1, h2, distance)
print (m) # should be true since the images are identical but returns false
# because there is a single bit difference in the two hashes

256 length hash to long to put here 但这里是两个哈希值不同的区域减 1 位(从末尾算第 6 位)

hash for 1.jpg 
00000000000000000000011000000000000010001001000000110000000010000010001
hash for 2.jpg
00000000100000000000011000000000000010001001000000110000000010000110001

最佳答案

[JPG]

保存的图片2.jpg与原始图片1.jpg不同。

您可以比较图像 online .

enter image description here

[BMP]

我试过将图片重新保存为bmp,所以它们完全相等,那么它们的哈希值也相等。

enter image description here

[PNG]

当转为png时,图像是相等的,但我发现位深度不同。

enter image description here

关于python - 两个相同的图像具有不同的哈希值无法弄清楚为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70374106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com