Python 两幅图像是否可能具有相同的像素值,但仍然不同?
我正在从事一个Python项目,在这个项目中,我对图像进行加密和解密。但是,每次我运行它时,解密的图像与原始图像不同,尽管它具有相同的像素值 我的代码Python 两幅图像是否可能具有相同的像素值,但仍然不同?,python,numpy,python-imaging-library,numpy-ndarray,Python,Numpy,Python Imaging Library,Numpy Ndarray,我正在从事一个Python项目,在这个项目中,我对图像进行加密和解密。但是,每次我运行它时,解密的图像与原始图像不同,尽管它具有相同的像素值 我的代码 img=Image.open(路径) 像素_值=np.asarray(img) img2=Image.open(“decrypted.png”) 像素_值_2=np.asarray(img2) 打印(像素值=像素值) 给出以下输出: [[True…True] [真的……真的] [真的……真的] ... [真的……真的] [真的……真的] [真的
img=Image.open(路径)
像素_值=np.asarray(img)
img2=Image.open(“decrypted.png”)
像素_值_2=np.asarray(img2)
打印(像素值=像素值)
给出以下输出:
[[True…True]
[真的……真的]
[真的……真的]
...
[真的……真的]
[真的……真的]
[真的……真的]]
有人知道我在这里遗漏了什么,或者我没有考虑过什么吗
原始图像:
解密图像:
链接的原始图像具有
p
,因此是图像。因此,原始图像(未映射到调色板)中的实际值似乎与“解密”图像中的值相同。(加密和解密实际上是做什么的?)因此,比较的NumPy数组是相同的。如果将原始图像转换为模式L
(灰度),则生成的NumPy数组不同,请参见以下代码:
将numpy导入为np
从PIL导入图像
img=Image.open('original.png')
img2=Image.open('decrypted.png')
打印(“原始模式:”,图像模式)
打印('模式解密:',img2.Mode)
打印(np.all(np.array(img)==np.array(img2)))
img=img.convert('L')
打印(np.all(np.array(img)==np.array(img2)))
这就是输出:
原始模式:P
模式解密:L
真的
假的
因此,实际的问题是,在加密/解密范围内的预期行为是什么?您是否知道原始图像中的模式P
附带说明:例如,当使用OpenCV打开两个图像时,生成的NumPy数组与开始时不同,因为OpenCV无法处理调色板图像
----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.16299-SP0
Python:3.9.1
NumPy:1.20.1
枕头:8.1.0
----------------------------------------
什么是numpy.array_equal(a1,a2)
?这也返回true。请检查此处并检查图像的模式。@MarkSetchell谢谢,这确实有帮助!