微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有可能两个图像具有相同的像素值但仍然不同?

如何解决是否有可能两个图像具有相同的像素值但仍然不同?

我正在处理一个 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]]

有谁知道我在这里可能遗漏了什么,或者我还没有考虑过什么?

原图:

original

解密图像:

decrypted

解决方法

链接的原始图像具有 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 举报,一经查实,本站将立刻删除。