【问题标题】:How to compare two image files pixel by pixel in python using selenium?如何使用硒在python中逐像素比较两个图像文件?
【发布时间】:2019-09-27 00:12:56
【问题描述】:

我想在 python 中使用 selenium 逐像素比较两个图像(.png 格式)。或者我怎么能用枕头库来做呢。

我有一个基本图像,我通过截取网页的屏幕截图来获得比较图像。我想比较这两个图像并断言它们是相等的。我该怎么做。

以下是我尝试过的:

def assert_images_are_equal(base_image, compare_image):
    with open(base_image, 'rb') as f1, open(compare_image, 'rb') as f2:
        base_image_contents = f1.read()
        compare_image_contents = f2.read()
    assert base_image_contents == compare_image_contents

但这并不总是有效。我想逐像素比较。有人可以使用枕头库或 PIL 以外的任何其他库来帮助我吗?谢谢。

【问题讨论】:

  • PIL 和枕头有一个共同的祖先。如果你想要枕头,为什么要标记硒?你能看看标签吗?
  • 我认为你想从根本上解决整个问题。你确定两张图片的分辨率一样吗?您对绝对相似性感兴趣吗?或者如果它们有些相似,您会感兴趣吗?
  • 我是编程新手。我想断言两个图像是相等的,并且我在 python 中使用带有 selenium 的机器人框架。我如何断言两个图像相等...确定图像是否相似的最常见方法是什么。谢谢
  • 不使用python,只使用selenium grid你可以做到这一点吗?如果你有兴趣我可以分享工具
  • 您可以使用基于 ImageMagick 的 Python Wand。它具有用于两个图像的逐像素匹配的比较功能。或者使用 OpenCV 模板匹配。

标签: python python-imaging-library


【解决方案1】:

很难说两张图片是否相同或相似,因为这取决于您对“相同”“相似”的定义。

  • 您可以制作一个纯红色图像,将其另存为 PNG,然后再次保存完全相同的图像,它可能会有所不同,因为 PNG 格式在图像标题中包含一个时间戳,该时间戳可能已移至保存之间的下一秒。

  • 您可以制作一个 8 位深的纯红色 PNG 文件,另一个是 16 位深的 PNG 文件,您看不到差异,但数据会大不相同。

  • 您可以按照 Motorola 字节顺序制作 TIF 文件,并按照 Intel 字节顺序制作相同的文件。在视觉上和计算上,它们将无法区分,但文件将大不相同。

  • 您可以制作一个红色的 GIF 文件,它看起来与 PNG 文件没有什么不同,但文件会有所不同。

  • 您可以制作调色板图像和真彩色图像,像素会大不相同,但看起来会相同。

  • 您可以制作一个中间有一个白色矩形的简单黑色图像,并使用一个 JPEG 库编写它,它会与使用不同 JPEG 库甚至不同发行版本编写的相同图像不同同一个库。

还有很多案例……

一个更有帮助的注释,您可能需要查看 Perceptual Hashing,它会告诉您图像是否看起来非常相似。 ImageMagick 是一个执行感知散列的库,它有一个 Python 绑定 herehere

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多