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 Web开发框架Django
Jun 30 Python
Python二分查找详解
Sep 13 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
python实现简单神经网络算法
Mar 10 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
Django REST framework 单元测试实例解析
Nov 07 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
从python读取sql的实例方法
Jul 21 Python
python 实现单例模式的5种方法
Sep 23 Python
python 实现性别识别
Nov 21 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使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
php利用递归实现删除文件目录的方法
2016/09/23 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
javascript 多级checkbox选择效果
2009/08/20 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python生成器(Generator)详解
2015/04/13 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
python使用super()出现错误解决办法
2017/08/14 Python
Python语言描述随机梯度下降法
2018/01/04 Python
python实现多张图片拼接成大图
2019/01/15 Python
Python实现TCP通信的示例代码
2019/09/09 Python
python 深度学习中的4种激活函数
2020/09/18 Python
python压包的概念及实例详解
2021/02/17 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
心得体会开头
2014/01/01 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
工程合作意向书范本
2015/05/09 职场文书
药房管理制度范本
2015/08/06 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle