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的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
Python基于回溯法子集树模板实现8皇后问题
Sep 01 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
python plotly画柱状图代码实例
Dec 13 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
python 写一个文件分发小程序
Dec 05 Python
python中使用np.delete()的实例方法
Feb 01 Python
python基础详解之if循环语句
Apr 24 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.ini中date.timezone设置分析
2011/07/29 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
Python 字符串定义
2009/09/25 Python
使用python开发vim插件及心得分享
2014/11/04 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
详解python中index()、find()方法
2019/08/29 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
德国家具在线:Fashion For Home
2017/03/11 全球购物
行政助理岗位职责范文
2013/12/03 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
安全检查汇报材料
2014/12/26 职场文书
庆元旦主持词
2015/07/06 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
Java 数据结构七大排序使用分析
2022/04/02 Java/Android