在 Python 中比较图像

新手上路,请多包涵

我需要比较两个图像,它们是软件的屏幕截图。我想检查两个图像是否相同,包括图像中显示的数字和字母。如何做到这一点?

原文由 stallion 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 460
2 个回答

有以下方法可以进行适当的比较。

  • 首先是 均方根差#

要衡量两幅图像的相似程度,您可以计算图像之间差异的均方根 (RMS) 值。如果图像完全相同,则该值为零。以下函数使用差分函数,然后从结果图像的直方图中计算 RMS 值。

 # Example: File: imagediff.py

import ImageChops
import math, operator

def rmsdiff(im1, im2):
    "Calculate the root-mean-square difference between two images"

    h = ImageChops.difference(im1, im2).histogram()

    # calculate rms
    return math.sqrt(reduce(operator.add,
        map(lambda h, i: h*(i**2), h, range(256))
    ) / (float(im1.size[0]) * im1.size[1]))

  • 另一个是 精确比较#

判断两幅图像是否具有完全相同的内容的最快方法是获取两幅图像之间的差异,然后计算该图像中非零区域的边界框。如果图像相同,则差异图像中的所有像素都为零,边界框函数返回 None。

 import ImageChops

def equal(im1, im2):
    return ImageChops.difference(im1, im2).getbbox() is None

原文由 NIlesh Sharma 发布,翻译遵循 CC BY-SA 3.0 许可协议

我正在维护一个名为 pyssim 的 Python 库,它使用 结构化相似性 (SSIM) 方法来比较两个图像。

它没有 python 绑定,但 perceptualdiff 程序在比较两个图像方面也很棒——而且速度非常快。

原文由 jterrace 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题