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 相关文章推荐
django model去掉unique_together报错的解决方案
Oct 18 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
django限制匿名用户访问及重定向的方法实例
Feb 07 Python
python实现关键词提取的示例讲解
Apr 28 Python
对python的文件内注释 help注释方法
May 23 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
如何利用python给图片添加半透明水印
Sep 06 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
python异常处理和日志处理方式
Dec 24 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 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
mysql5写入和读出乱码解决
2006/11/25 PHP
PHP禁止页面缓存的代码
2011/10/23 PHP
浅析PHP绘图技术
2013/07/03 PHP
linux下实现定时执行php脚本
2015/02/13 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
jQuery的学习步骤
2011/02/23 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
react redux入门示例
2018/04/19 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
公司活动邀请函
2014/01/24 职场文书
教师绩效工资方案
2014/02/01 职场文书
2014年防汛工作总结
2014/12/08 职场文书
学生个人总结范文
2015/02/15 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL
总结Pyinstaller打包的高级用法
2021/06/28 Python