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设置tmpfs来加速项目的教程
Apr 17 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
Python中动态创建类实例的方法
Mar 24 Python
Python中你应该知道的一些内置函数
Mar 31 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
python实现对求解最长回文子串的动态规划算法
Jun 02 Python
python3+requests接口自动化session操作方法
Oct 13 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
实时获取Python的print输出流方法
Jan 07 Python
Python 分发包中添加额外文件的方法
Aug 16 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
python基础入门之字典和集合
Jun 13 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
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
Pyhton中防止SQL注入的方法
2015/02/05 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
Python flask框架post接口调用示例
2019/07/03 Python
wxPython实现文本框基础组件
2019/11/18 Python
python enumerate内置函数用法总结
2020/01/07 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
护士自荐信
2013/10/25 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
搞笑的获奖感言
2014/08/16 职场文书
房屋授权委托书范本
2014/10/07 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL
Python实现视频自动打码的示例代码
2022/04/08 Python