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脚本关闭文件操作的机制
Jun 28 Python
Python检测生僻字的实现方法
Oct 23 Python
浅谈Python浅拷贝、深拷贝及引用机制
Dec 15 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
Python 读取用户指令和格式化打印实现解析
Sep 02 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
python动态视频下载器的实现方法
Sep 16 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
python如何实现复制目录到指定目录
Feb 13 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
Python实现微信表情包炸群功能
Jan 28 Python
Python OpenCV 图像平移的实现示例
Jun 04 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伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
php里array_work用法实例分析
2015/07/13 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
js闭包用法实例详解
2016/12/13 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
python判断windows系统是32位还是64位的方法
2015/05/11 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
python使用建议技巧分享(三)
2020/08/18 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
优秀实习生感言
2014/03/01 职场文书
分家协议书
2014/04/21 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
校园文化标语
2014/06/18 职场文书
大四毕业生自荐书
2014/07/05 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
2014年体育工作总结
2014/11/24 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript