笔者前几天公司给我说让我做图形比对,一开始我打算调用C#的dll,因为java这方面是弱项。后来项目经理说不用那么麻烦,只是给个参考而已,最终的判断是交给客户进行最终判定的。我就改用使用java中简单对比。因为要使用多种方法进行判定,尽可能给用户多一点参考条件,所以将他打包成jar包。先说说各个方法把,
1.直接算像素比觉得算起来太慢了,然后做个判断几个点是否一样,如果不一样,就没有对比的必要了。缺点也很多:效率很低,当你图片变变颜色,极有可能会得出完全不相似的结果
2.之后参考网上的算汉明距离,编写算法后发现,如果是两面差不多的图片,基本可以识别了,像素不一样,但不能旋转,旋转勒也不相似,但如果给人物换个背景,颜色依旧识别不出来,相对于像素比来说已经是非常快了
3.之后莫名的想用MD5去做一下,发现根本不靠谱!!!!!!也就是一样的图片可以这么玩剩下都是差评
4之后用了下直方图滤波,给个好评,这是相对于其他方法,较为精确的一种计算,如果你们只是需要一个工具类的话可以参考我写的这个
5.还用一种就是指纹算法,咋说那,只能说一般,但还行,
最后得出一个结论,java图片对比真的很弱,如果要用c++估计早弄好了,关键是还算的不咋准确,这是最蛋疼,如果要用精确的,大家还是考虑下跨语言开发做图形对比吧