通常逐字节比较在所有情况下都不会有效。您可以使用此代码from this article来检查图像之间的差异。你可以根据你的需要来检查它的差异。
from itertools import izip
import Image
i1 = Image.open("image1.jpg")
i2 = Image.open("image2.jpg")
assert i1.mode == i2.mode, "Different kinds of images."
assert i1.size == i2.size, "Different sizes."
pairs = izip(i1.getdata(), i2.getdata())
if len(i1.getbands()) == 1:
# for gray-scale jpegs
dif = sum(abs(p1-p2) for p1,p2 in pairs)
else:
dif = sum(abs(c1-c2) for p1,p2 in pairs for c1,c2 in zip(p1,p2))
ncomponents = i1.size[0] * i1.size[1] * 3
print "Difference (percentage):", (dif/255.0 * 100)/ncomponents
检查也filecmp.cmp()
从filecmp package
它可能会有所帮助。
UPDATE
我是想检查哪些是两幅图像之间进行比较的最快方法:Pixel by Pixel,PIL或使用statistical techniques,但我无法注意到性能的巨大差异。这个问题可能与图像的重量有关。
from PIL import Image, ImageChops
pixelsDifference = ImageChops.difference(Image.open('image1.png'), Image.open('image2.png')).convert('L')
pixelsDifference = pixelsDifference.point(([0] + ([255] * 255)))
Img = pixelsDifference.convert('RGB')
你可以使用外部库如numpy吗? – Eric 2014-11-02 08:53:11
基本上你试图重新实现某种视频流。现在已经有涉及视频编解码器的解决方案,这可能会产生更好的效果 – Eric 2014-11-02 08:55:09
@Eric是的!我可以使用外部库。 – user3286661 2014-11-02 09:08:32