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中基础的socket编程实战攻略
Jun 01 Python
分享一个可以生成各种进制格式IP的小工具实例代码
Jul 28 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
Python实现二维数组输出为图片
Apr 03 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
Python简单处理坐标排序问题示例
Jul 11 Python
pyqt5中动画的使用详解
Apr 01 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 Python
使用python对excel表格处理的一些小功能
Jan 25 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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 IN_ARRAY 函数使用注意事项
2010/07/24 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
JavaScript 指导方针
2007/04/05 Javascript
JavaScript 函数式编程的原理
2009/10/16 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
Python函数中定义参数的四种方式
2014/11/30 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
python实现银联支付和支付宝支付接入
2019/05/07 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
德国旅游网站:weg.de
2018/06/03 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
空字符串(“”)和null的区别
2012/11/13 面试题
如何利用find命令查找文件
2016/11/18 面试题
医学检验专业个人求职信范文
2013/12/04 职场文书
小学生自我评价范文
2014/01/25 职场文书
小学生手册家长评语
2014/04/16 职场文书
三八妇女节标语
2014/10/09 职场文书
车间班组长竞聘书
2015/09/15 职场文书