Явление, с которым вы столкнулись, является результатом того, что сжатие данных не определено на 100%.PNG-файлы используют DEFLATE сжатие, которое требует, чтобы данный сжатый файл всегда распаковывался в один и тот же вывод, но не требует, чтобы заданный ввод создавал один и тот же сжатый файл.Это дает возможность для улучшения в алгоритме сжатия, где можно найти более оптимальное сжатие для файла другого типа.Похоже, ваше исходное изображение было сжато с использованием лучшего (или просто другого) алгоритма, чем используется cv2
.Чтобы дублировать точную сжатую версию, вам, вероятно, потребуется точно такая же реализация алгоритма сжатия, который использовался для создания исходного изображения.
Если вы хотите убедиться, что изображения действительно идентичны, вам следует сравнитьдекодированные значения пикселей.Во имя повторного изобретения колеса я отсылаю вас к этому отличному сообщению в блоге на эту тему.
Редактировать: связанная статья не былазагрузка последовательно для меня, поэтому я скопировал код здесь для ссылки.
import cv2
import numpy as np
original = cv2.imread("imaoriginal_golden_bridge.jpg")
duplicate = cv2.imread("images/duplicate.jpg")
# 1) Check if 2 images are equals
if original.shape == duplicate.shape:
print("The images have same size and channels")
difference = cv2.subtract(original, duplicate)
b, g, r = cv2.split(difference)
if cv2.countNonZero(b) == 0 and cv2.countNonZero(g) == 0 and cv2.countNonZero(r) == 0:
print("The images are completely Equal")