相关疑难解决方法(0)

比较python/linux方式的两个图像

试图解决防止上传重复图像的问题.

我有两个JPG.看着它们,我可以看到它们实际上是相同的.但由于某种原因,它们具有不同的文件大小(一个是从备份中提取的,另一个是另一个上载),因此它们具有不同的md5校验和.

我怎样才能有效和自信地比较两个图像,就像人类能够看到它们完全相同?

示例:http://static.peterbe.com/a.jpghttp://static.peterbe.com/b.jpg

更新

我写了这个脚本:

import math, operator
from PIL import Image
def compare(file1, file2):
    image1 = Image.open(file1)
    image2 = Image.open(file2)
    h1 = image1.histogram()
    h2 = image2.histogram()
    rms = math.sqrt(reduce(operator.add,
                           map(lambda a,b: (a-b)**2, h1, h2))/len(h1))
    return rms

if __name__=='__main__':
    import sys
    file1, file2 = sys.argv[1:]
    print compare(file1, file2)
Run Code Online (Sandbox Code Playgroud)

然后我下载了两个视觉上相同的图像并运行脚本.输出:

58.9830484122
Run Code Online (Sandbox Code Playgroud)

谁能告诉我一个合适的截止点应该是什么?

更新II

a.jpg和b.jpg之间的区别在于第二个用PIL保存了:

b=Image.open('a.jpg')
b.save(open('b.jpg','wb'))
Run Code Online (Sandbox Code Playgroud)

这显然适用于一些非常轻质的修改.我现在已经解决了我的问题,将相同的PIL保存应用到正在上传的文件而不用它做任何事情它现在可以工作了!

python linux image

39
推荐指数
4
解决办法
7万
查看次数

标签 统计

image ×1

linux ×1

python ×1