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自带的http模块详解
Nov 06 Python
python函数的5种参数详解
Feb 24 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
Python实现快速计算词频功能示例
Jun 25 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
python自定义时钟类、定时任务类
Feb 22 Python
Python3 JSON编码解码方法详解
Sep 06 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
pycharm通过ssh连接远程服务器教程
Feb 12 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
python else语句在循环中的运用详解
Jul 06 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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中\r \r\n \t的区别示例介绍
2014/02/08 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
写js时遇到的一些小问题
2010/12/06 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
vscode下的vue文件格式化问题
2018/11/28 Javascript
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
python多进程共享变量
2016/04/06 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
What's the difference between Debug and Trace class? (Debug类与Trace类有什么区别)
2013/09/10 面试题
毕业生在校学习的自我评价分享
2013/10/08 职场文书
自考生毕业自我鉴定
2013/10/10 职场文书
办理退休介绍信
2014/01/09 职场文书
初三学习计划书范文
2014/04/30 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
社区矫正工作方案
2014/06/04 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
Java基础——Map集合
2022/04/01 Java/Android
MySQL创建管理子分区
2022/04/13 MySQL