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线程中对join方法的运用的教程
Apr 09 Python
Django基于ORM操作数据库的方法详解
Mar 27 Python
Python实现程序判断季节的代码示例
Jan 28 Python
python 寻找离散序列极值点的方法
Jul 10 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
Python内存映射文件读写方式
Apr 24 Python
python多进程下的生产者和消费者模型
May 07 Python
Python数据可视化实现多种图例代码详解
Jul 14 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 Python
python实现简单贪吃蛇游戏
Sep 29 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 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编程实现获取excel文档内容的代码实例
2011/06/28 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
php制作动态随机验证码
2015/02/12 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
jquery对表单操作2
2011/04/06 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
JS简单计算器实例
2015/01/20 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
vue跨域解决方法
2017/10/15 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
Python字符串的修改方法实例
2019/12/19 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
Python grpc超时机制代码示例
2020/09/14 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
2014年创卫实施方案
2014/02/18 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
应急处置方案
2014/06/16 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
浅谈JS的二进制家族
2021/05/09 Javascript
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS