Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过读取二进制数据比较Python中的图像_Python_Image_Compare - Fatal编程技术网

通过读取二进制数据比较Python中的图像

通过读取二进制数据比较Python中的图像,python,image,compare,Python,Image,Compare,我想比较python中的图像,比如imageA.jpg和imageB.jpg。我是这样做的: f = open('./imageA.jpg','rb') imgA = f.read() f.close() f = open('./imageB.jpg','rb') imgB = f.read() f.close() imagesEqual = imgA == imgB 最后一行基本上检查从两个图像文件读取的二进制数据的字符串相等性。 现在,许多stackoverflow问题和google搜索建

我想比较python中的图像,比如imageA.jpg和imageB.jpg。我是这样做的:

f = open('./imageA.jpg','rb')
imgA = f.read()
f.close()
f = open('./imageB.jpg','rb')
imgB = f.read()
f.close()
imagesEqual = imgA == imgB
最后一行基本上检查从两个图像文件读取的二进制数据的字符串相等性。 现在,许多stackoverflow问题和google搜索建议使用像ImageChops或OpenCV这样的python模块。我这样做是不对的吗?如果是,为什么


谢谢

如果您只想知道它们是否不同,请尝试:

import filecmp
if filecmp.cmp(filename1, filename2, shallow=False):

与代码比较文件,而不是图像。如果要比较图像的真实内容(即像素值),应打开并加载两个图像(imgA=Image.open('./imageA.jpg')、imgA.load())并进行比较,因为有时两个相同图像的文件可能包含不同的标题,元数据…在这种情况下,图像是相同的,但文件是不同的。

如果您希望文件完全相等,则可以。如果您想允许一些差异(例如,
imageA
中的1个像素比
imageB
中的同一个像素稍微轻一点),那么它当然是无用的;-)即使两个图像在最后一个像素处完全相同,但如果某些头(jfif、exif)不同,它们也不会相等。您不是在比较图形,而是在比较字节。那么,两个图像是否可以具有相同的exif/jiff头数据?如何比较仅是图像数据而不是文件头数据的字节?因此,这里的“不同”表示图像不同或文件不同?我想看看这些图像是否不同。这是否避免了比较上面Hyperboreus提到的标题数据(exif或jiff)?