如何从OpenCV、python 3中获取图像原始字节



我试图用opencv对图像进行哈希,但与原生python哈希相比,我得到了不同的结果(我需要哈希来比较文件(。

以下是示例代码:

from hashlib import sha256
​
import cv2
​
if __name__ == '__main__':​
image = cv2.imread("test.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
print(sha256(image.tobytes()).hexdigest())
with open("test.jpg", "rb") as fl:
print(sha256(fl.read()).hexdigest())

还有输出:

276f7ff1512be1ff3d62d184e881798b3dd46ea81ed104ca169364725dd6312f
0c02c622c7ddda5aba0b4172cfa3e0fe0179bc370f07305c94178ae781da7804

image是一个包含解码图像的numpy数组,tobytes只是将该数组的内容作为字节串提供给您。

另一方面,图像文件的内容是编码(JPG(图像,因此将文件作为字节串读取不会返回与tobytes相同的数据。

一种可能的方法是将图像再次编码为JPG,但由于这是一个有损操作,它现在可能会给出与输入完全相同的结果,因此字节串仍然可能具有不同的哈希。