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中集合类型(set)学习小结
Jan 28 Python
详解python3实现的web端json通信协议
Dec 29 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
Python实现的下载网页源码功能示例
Jun 13 Python
Python读写/追加excel文件Demo分享
May 03 Python
python list是否包含另一个list所有元素的实例
May 04 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
关于Tensorflow分布式并行策略
Feb 03 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
Python3中对json格式数据的分析处理
Jan 28 Python
如何使用flask将模型部署为服务
May 13 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
ajax 的post方法实例(带循环)
2011/07/04 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
动态加载js和css(外部文件)
2013/04/17 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
Python基础之函数用法实例详解
2014/09/10 Python
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
对Python _取log的几种方式小结
2019/07/25 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
小饰品店的创业计划书范文
2013/12/28 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
技能比武方案
2014/05/21 职场文书
美食节目策划方案
2014/05/31 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
体育专业求职信
2014/07/16 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python