如何解决是否有可能两个图像具有相同的像素值但仍然不同?
我正在处理一个 Python 项目,我在其中加密和解密图像。但是,每次运行时,解密后的图像虽然像素值相同,但与原始图像不同。
我的代码
img = Image.open(path)
pixel_values =np.asarray(img)
img2 = Image.open("decrypted.png")
pixel_values_2 =np.asarray(img2)
print(pixel_values_2==pixel_values)
给出以下输出:
[[ True True True ... True True True]
[ True True True ... True True True]
[ True True True ... True True True]
...
[ True True True ... True True True]
[ True True True ... True True True]
[ True True True ... True True True]]
有谁知道我在这里可能遗漏了什么,或者我还没有考虑过什么?
原图:
解密图像:
解决方法
链接的原始图像具有 mode P
,因此是 palettised 图像。因此,原始图像(未映射到调色板)中的实际值似乎与“解密”图像中的相同。 (您的加密和解密实际上是做什么的?)因此,比较的 NumPy 数组是相同的。如果将原始图像转换为模式 L
(灰度),则生成的 NumPy 数组是不同的,参见。以下代码:
import numpy as np
from PIL import Image
img = Image.open('original.png')
img2 = Image.open('decrypted.png')
print('Mode original:',img.mode)
print('Mode decrypted:',img2.mode)
print(np.all(np.array(img) == np.array(img2)))
img = img.convert('L')
print(np.all(np.array(img) == np.array(img2)))
这就是输出:
Mode original: P
Mode decrypted: L
True
False
那么,实际的问题是,您的加密/解密范围内的预期行为是什么?您知道原始图像中的模式 P
吗?
附带说明:例如,当使用 OpenCV 打开两个图像时,生成的 NumPy 数组与开始时不同,因为 OpenCV 无法处理调色图像。
----------------------------------------
System information
----------------------------------------
Platform: Windows-10-10.0.16299-SP0
Python: 3.9.1
NumPy: 1.20.1
Pillow: 8.1.0
----------------------------------------
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。