python判断图片相似度_Python比较两个图片的相似度

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

#!/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,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,i),fill = '#ff0000')

draw.line((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')

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值