试图解决防止重复图像被上传的问题。
我有两个JPG。看着它们,我可以看到它们实际上是相同的。但是由于某些原因,它们具有不同的文件大小(一个是从备份中拉出的,另一个是另一个上载的),因此它们具有不同的md5校验和。
我如何能高效自信地比较两幅图像,就像人类能够看到它们完全相同一样?
示例:http :
//static.peterbe.com/a.jpg和http://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)
然后,我下载了两个视觉上相同的图像并运行了脚本。输出:
58.9830484122
有人可以告诉我什么是合适的临界值吗?
更新二
a.jpg和b.jpg之间的区别是第二个已使用PIL保存:
b=Image.open('a.jpg')
b.save(open('b.jpg','wb'))
这显然应用了一些非常非常轻的质量修改。现在,我对上传的文件应用了相同的PIL保存,而无需进行任何操作,从而解决了我的问题,它现在可以正常工作!
有一个OSS项目,该项目使用WebDriver拍摄屏幕快照,然后比较图像以查看是否存在任何问题(http://code.google.com/p/fighting-
layout-bugs/)
)。通过将文件打开到流中,然后比较每个位来完成此操作。
您也许可以使用PIL做类似的事情。
编辑:
经过更多研究,我发现
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))
在http://snipplr.com/view/757/compare-two-pil-images-in-
python/
和http://effbot.org/zone/pil-comparing-
images.htm上
问题内容: 我有两个地图声明为。在这里可以是另一个(依此类推)。我想检查两个地图是否完全相同,但不知道其深度。除了使用递归,我还可以比较每个地图上被调用的输出吗?还是有比较简单的方法比较地图? 问题答案: 快速回答 您应该使用该方法,因为已经实现了该方法以执行所需的比较。本身就像使用迭代器一样,但这是一种效率较低的方法。另外,正如@Teepeemm所指出的那样,它受元素顺序的影响(基本上是迭代器的
问题内容: 在Java中,我想比较两个地图,如下所示,我们是否有现有的API可以做到这一点? 谢谢 问题答案: 我将使用Set的removeAll()功能来设置键的差异,以查找添加和删除的内容。可以通过使用设置为HashMap的条目进行设置差异来检测实际更改。Entry同时使用键和值实现equals()。 输出量
请帮助我提供一个解决方案,通过使用SeleniumRubyWebDriver比较Web应用程序的两个URL中的两个图像是否相同(我的意思是每个图像中的内容都相同)。 例如:访问下面的网址时,我有一个小图像显示: 访问下面的URL时,我还有另一个图像: 我怎样才能比较这两个图像,看看他们是否是相同的使用Selenium Ruby WebDrive?任何建议都很感激。非常感谢。
问题内容: 我正在寻找一种比较两个图像以查看它们有多相似的方法。谷歌搜索它会产生大量的图像处理结果(裁剪,调整大小等),但是没有什么可以做图像的近似比较。有一个Node.js库,但是它的版本为0.0.1,并且依赖于各种第三方系统软件包,因此不稳定或可移植。 遵循以下原则: 问题答案: 有node-opencv模块,您可以使用它来执行繁重的操作,例如图像比较。 屏幕截图或图标可以变形(缩放,旋转,倾
有两个叫做“a.txt”和“b.txt”的文件都有单词列表。现在我想检查哪些单词在“a.txt”中是额外的,而不是在“b.txt”中。 我需要一个有效的算法,因为我需要比较两个字典。
问题内容: 有两个名为 “ a.txt” 和 “ b.txt”的文件 ,都有一个单词列表。现在,我要检查 “ a.txt”中 哪些单词是多余的,而 “ b.txt”中 哪些单词不是。 我需要一种有效的算法,因为我需要比较两个字典。 问题答案: 这是我的解决方案: