Как получить исходные байты изображения из OpenCV, python 3? - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь получить sh изображение с 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

1 Ответ

1 голос
/ 12 марта 2020

image - это массив numpy, содержащий декодированное изображение , tobytes просто выдает содержимое этого массива в виде строки байтов.

С другой стороны, содержимое файла изображения представляет собой изображение в формате (JPG) , поэтому при считывании файла в виде строки байтов не будут возвращаться те же данные, что и tobytes.

Один из возможных способов обхода это делается для того, чтобы снова закодировать изображение в JPG, но, поскольку это операция с потерями, теперь он может дать точно такой же результат, что и входные данные, поэтому строка байтов может по-прежнему иметь другие хэши.

...