Python比较两个图片相似度的方法


Posted in Python onMarch 13, 2015

本文实例讲述了Python比较两个图片相似度的方法。分享给大家供大家参考。具体分析如下:

这段代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一些,太小的图片不好比较。附件提供完整测试代码和对比用的图片。

#!/usr/bin/python

# Filename: histsimilar.py

# -*- coding: utf-8 -*-

import Image

def make_regalur_image(img, size = (256, 256)):

    return img.resize(size).convert('RGB')

def split_image(img, part_size = (64, 64)):

    w, h = img.size

    pw, ph = part_size

    assert w % pw == h % ph == 0

    return [img.crop((i, j, i+pw, j+ph)).copy() \

                for i in xrange(0, w, pw) \

                for j in xrange(0, h, ph)]

def hist_similar(lh, rh):

    assert len(lh) == len(rh)

    return sum(1 - (0 if l == r else float(abs(l - r))/max(l, r)) for l, r in zip(lh, rh))/len(lh)

def calc_similar(li, ri):

#   return hist_similar(li.histogram(), ri.histogram())

    return sum(hist_similar(l.histogram(), r.histogram()) for l, r in zip(split_image(li), split_image(ri))) / 16.0

def calc_similar_by_path(lf, rf):

    li, ri = make_regalur_image(Image.open(lf)), make_regalur_image(Image.open(rf))

    return calc_similar(li, ri)

def make_doc_data(lf, rf):

    li, ri = make_regalur_image(Image.open(lf)), make_regalur_image(Image.open(rf))

    li.save(lf + '_regalur.png')

    ri.save(rf + '_regalur.png')

    fd = open('stat.csv', 'w')

    fd.write('\n'.join(l + ',' + r for l, r in zip(map(str, li.histogram()), map(str, ri.histogram()))))

#   print >>fd, '\n'

#   fd.write(','.join(map(str, ri.histogram())))

    fd.close()

    import ImageDraw

    li = li.convert('RGB')

    draw = ImageDraw.Draw(li)

    for i in xrange(0, 256, 64):

        draw.line((0, i, 256, i), fill = '#ff0000')

        draw.line((i, 0, i, 256), fill = '#ff0000')

    li.save(lf + '_lines.png')

if __name__ == '__main__':

    path = r'testpic/TEST%d/%d.JPG'

    for i in xrange(1, 7):

        print 'test_case_%d: %.3f%%'%(i, \

            calc_similar_by_path('testpic/TEST%d/%d.JPG'%(i, 1), 'testpic/TEST%d/%d.JPG'%(i, 2))*100)

#   make_doc_data('test/TEST4/1.JPG', 'test/TEST4/2.JPG')

完整实例代码点击此处本站下载。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
Python入门及进阶笔记 Python 内置函数小结
Aug 09 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
python实现数据库跨服务器迁移
Apr 12 Python
使用python将excel数据导入数据库过程详解
Aug 27 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
Python While循环语句实例演示及原理解析
Jan 03 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
Python字典取键、值对的方法步骤
Sep 30 Python
python通过urllib2获取带有中文参数url内容的方法
Mar 13 #Python
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 #Python
python通过正则查找微博@(at)用户的方法
Mar 13 #Python
python使用chardet判断字符串编码的方法
Mar 13 #Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 #Python
python实现根据窗口标题调用窗口的方法
Mar 13 #Python
Python实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 #Python
You might like
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
关于JavaScript作用域你想知道的一切
2016/02/04 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
实用Javascript调试技巧分享(小结)
2019/06/18 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
如何在python中使用selenium的示例
2017/12/26 Python
Python的几种主动结束程序方式
2019/11/22 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
介绍一些UNIX常用简单命令
2014/11/11 面试题
大学应届生求职简历的自我评价
2013/10/08 职场文书
预备党员转正考核材料
2014/06/03 职场文书
迎国庆横幅标语
2014/10/08 职场文书
党员带头倡议书
2015/04/29 职场文书
作弊检讨书范文
2015/05/06 职场文书
民事纠纷协议书
2016/03/23 职场文书