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完全新手教程
Feb 08 Python
Python中的日期时间处理详解
Nov 17 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
Mar 23 Python
Django中的Model操作表的实现
Jul 24 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
用Python实现数据的透视表的方法
Nov 16 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
Python+threading模块对单个接口进行并发测试
Jun 25 Python
Python3实现zip分卷压缩过程解析
Oct 09 Python
学python安装的软件总结
Oct 12 Python
Python 用三行代码提取PDF表格数据
Oct 13 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
May 17 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数组实例总结与说明
2011/08/23 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
php的debug相关函数用法示例
2016/07/11 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
jquery实现表格本地排序的方法
2015/03/11 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
浅谈python对象数据的读写权限
2016/09/12 Python
一百多行python代码实现抢票助手
2018/09/25 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
道德演讲稿
2014/05/21 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
作风大整顿心得体会
2014/09/10 职场文书
涨价通知
2015/04/23 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL