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 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
Python实现豆瓣图片下载的方法
May 25 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
解决python大批量读写.doc文件的问题
May 08 Python
python迭代dict的key和value的方法
Jul 06 Python
python如何创建TCP服务端和客户端
Aug 26 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
Mar 02 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
基于Tensorflow的MNIST手写数字识别分类
Jun 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
ThinkPHP的URL重写问题
2014/06/22 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
Prototype Function对象 学习
2009/07/12 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
2014/02/19 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
Python测试模块doctest使用解析
2019/08/10 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
python如何快速生成时间戳
2020/07/21 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
行政助理岗位职责
2013/11/10 职场文书
校园自助餐厅的创业计划书
2013/12/26 职场文书
2014年创卫实施方案
2014/02/18 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
个人贷款承诺书
2014/03/28 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
意外事故赔偿协议书
2016/03/22 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis