【问题标题】:How to get image original bytes from OpenCV, python 3?如何从 OpenCV、python 3 获取图像原始字节?
【发布时间】:2020-06-24 14:47:34
【问题描述】:

我正在尝试使用 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

【问题讨论】:

  • 正如@GPhilo 所说,第一个是存储在内存中的 RGB/BGR 像素的哈希值,第二个是磁盘上 JPEG 文件的哈希值,该文件可能包含照片拍摄,相机和镜头型号,GPS坐标等。

标签: python python-3.x opencv hash sha


【解决方案1】:

image 是一个包含 解码 图像的 numpy 数组,tobytes 只是以字节串的形式提供该数组的内容。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2013-05-08
    • 2013-09-12
    • 2011-07-27
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多