我正在学习比较两个图像/图片。我发现该帖子以python / linux方式比较两个图像非常有用,并且我对该技术有一些疑问。
问题1:
帖子显示了比较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)
这是两张图片之间存在差异的图片位置。所以我的问题是,是否可以在图片上标记差异(例如,画一个圆)?
问题2:
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:需要多个0值才能解包”,问题出在这一行:
file1, file2 = sys.argv[1:]
我该如何纠正?我在下面尝试了都行不通。
print compare('c:\\a.jpg', 'c:\\b.jpg')
在Matt的帮助下添加了问题。
它可以绘制一个矩形来标记两个图像/图片上的差异。当两张图像/图片看起来大体相同时,却散布着小斑点。它绘制一个大矩形,标记包含所有斑点差异的大区域。有没有办法分别标记差异?
关于您的第一个问题:
import ImageDraw
draw = ImageDraw.Draw(im2)
draw.rectangle(diff)
im2.show()
关于第二个问题:
错误状态,表明sys.argv
没有足够的值分配给file1
和file2
。您需要将要比较的两个文件的名称传递给python脚本(变量sys.arv
包含脚本的名称和所有命令行参数):
python name_of_your_script.py file1.jpg file2.jpg
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句