python - 比较两个图像/图片,并标记差异

标签 python python-imaging-library

我正在学习比较两个图像/图片。我找到了帖子 Compare two images the python/linux way非常有用,我对这项技术有一些疑问。

问题一:

帖子显示了比较 2 张图片/图像的方法。可能最简单的方法是:

from PIL import Image
from PIL import ImageChops

im1 = Image.open("file1.jpg")
im2 = Image.open("file2.jpg")

diff = ImageChops.difference(im2, im1).getbbox()

print diff

当我有 2 张相似的图片并在上面运行时,它给出了结果:

(389, 415, 394, 420)

就是两张图片不同的地方在图片上的位置。所以我的问题是,是否可以在图片上标出不同之处(例如画一个圆圈)?

问题二:

import math, operator
from PIL import Image
def compare(file1, file2):
    image1 = Image.open(file1)
    image2 = Image.open(file2)
    h1 = Image.open("image1").histogram()
    h2 = Image.open("image2").histogram()

    rms = math.sqrt(reduce(operator.add, map(lambda a,b: (a-b)**2, h1, h2))/len(h1))

if __name__=='__main__':
    import sys
    file1 = ('c:\\a.jpg')        # added line
    file2 = ('c:\\b.jpg')        # added line

    file1, file2 = sys.argv[1:]
    print compare(file1, file2)

当我在上面运行时,它给出了一个错误“ValueError: need more than 0 values to unpack”,问题出在这一行:

file1, file2 = sys.argv[1:]

我怎样才能更正它?我在下面尝试过它都不起作用。

    print compare('c:\\a.jpg', 'c:\\b.jpg')

更新

在 Matt 的帮助下添加了问题。

它可以绘制一个矩形来标记两个图像/图片的差异。当两张图像/图片看起来大致相同但存在小 Blob 差异时。它绘制了一个大矩形,标记了包括所有 Blob 差异的大区域。有没有一种方法可以单独相同地标记差异?

最佳答案

关于您的第一个问题:

import ImageDraw
draw = ImageDraw.Draw(im2)
draw.rectangle(diff)
im2.show()

关于你的第二个问题:

错误指出,sys.argv 没有包含足够的值来分配给 file1file2。您需要将要比较的两个文件的名称传递给 python 脚本(变量 sys.arv 包含脚本的名称和所有命令行参数):

python name_of_your_script.py file1.jpg file2.jpg

关于python - 比较两个图像/图片,并标记差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26773850/

相关文章:

java - 使用 Chaquopy 将多个列表从 Python 返回到 Java

python - 定义 table_schema 时无法将具有 NaN(或 None)值的 Pandas 数据帧插入 BigQuery 表中

python - 当使用各种不同的方法缩小比例时,图像梯度变得不准确

python-3.x - 如何从图像中提取文本

python - Pandas 按两列分组并绘制

python - 如何实现粒子引擎

Python 查找对,相同的值

python - PIL 图像模式 "P"-> "RGBA"

python - 使用 PIL 从任何图像中删除透明度/alpha

python - 在 Python 中组合 R、G 和 B 组件时的颜色不匹配