#!/usr/bin/python
# -*- coding: UTF-8 -*-
#Less than 10 add to list and sort
import glob
import os
import sys
from functools import reduce
from PIL import Image EXTS = 'jpg', 'jpeg', 'JPG', 'JPEG', 'gif', 'GIF', 'png' def avhash(im):
if not isinstance(im, Image.Image):
im = Image.open(im)
if im.mode=='RGBA':
im=ConvertRBGA(im)
im = im.resize((8, 8), Image.ANTIALIAS).convert('L')
avg = reduce(lambda x, y: x + y, im.getdata()) / 64.0
return reduce(lambda x, y_z: x | (y_z[1] << y_z[0]), enumerate(map(lambda i: 0 if i < avg else 1, im.getdata())), 0) def hamming(h1, h2):
h, d = 0, h1 ^ h2
while d:
h += 1
d &= d - 1
return h def ConvertRBGA(img):
x,y = img.size
# # (alpha band as paste mask).
p = Image.new('RGBA', img.size, (255,255,255))
p.paste(img, (0, 0, x, y),img)
return p if __name__ == '__main__':
#if len(sys.argv) <= 1 or len(sys.argv) > 3:
# print ("Usage: %s image.jpg [dir]" % sys.argv[0])
#else:
# im, wd = sys.argv[1], '.' if len(sys.argv) < 3 else sys.argv[2]
im, wd = 'gs6.png', '.' if len(sys.argv) < 3 else sys.argv[2]
h = avhash(im)
os.chdir(wd);
images = []
for ext in EXTS:
images.extend(glob.glob('*.%s' % ext)) seq = []
prog = int(len(images) > 50 and sys.stdout.isatty())
for f in images:
result=avhash(f)
seq.append((f, hamming(result, h)))
if prog:
perc = 100. * prog / len(images)
x = int(2 * perc / 5)
print ('\rCalculating... [' + '#' * x + ' ' * (40 - x) + ']'),
print ('%.2f%%' % perc, '(%d/%d)' % (prog, len(images))),
sys.stdout.flush()
prog += 1 if prog: print
for f, ham in sorted(seq, key=lambda i: i[1]):
print ("%d\t%s" % (ham, f))

感知哈希算法 python 3.4的更多相关文章

  1. 感知哈希算法——Python实现【转】

    转自:https://blog.csdn.net/m_buddy/article/details/78887248 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

  2. 感知哈希算法的java实现

    一.原理讲解      实现这种功能的关键技术叫做"感知哈希算法"(Perceptual Hash Algorithm), 意思是为图片生成一个指纹(字符串格式), 两张图片的指纹 ...

  3. 谷歌百度以图搜图 "感知哈希算法" C#简单实现

    /// <summary> /// 感知哈希算法 /// </summary> public class ImageComparer { /// <summary> ...

  4. Iconfinder 如何杜绝盗版,哈希算法检测图像重复

    原地址:http://blog.jobbole.com/65914/ 本文由 伯乐在线 - 小鱼 翻译自 Silviu Tantos.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. [伯乐在线导读 ...

  5. 压缩感知重构算法之IRLS算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  6. 压缩感知重构算法之OLS算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  7. 压缩感知重构算法之CoSaMP算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  8. 压缩感知重构算法之IHT算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  9. 压缩感知重构算法之SP算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

随机推荐

  1. 对于行高(line-height)的一些理解

    刚一开始学习这个特性的时候,总是出一些当时看起来很奇怪的问题.现在决定重新整理一下.毕竟使用css,十行揉在一起凑出效果是一种使用,知道为什么会有这种效果也是一种使用.我们需要做一些测试,所以首先需要 ...

  2. css 小知识

    <!-- IE下消除点击图片文字后出现的虚线框代码 --> <style type="text/css">a {blr:expression(this.on ...

  3. concurrent实用类

    improt java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.RejectedExecutionHandler; ...

  4. ES CPU和磁盘IO升高

    问题 ES监控出现偶尔的波动,CPU和磁盘IO升高 有时候在凌晨,业务请求比较低,也没有慢查询,GC也比较正常,没有出现Full GC ES内部的merge segment会占用CPU和磁盘资源,怀疑 ...

  5. maven 3.3.9-bin 和 maven 3.3.9-src 的区别 以及 maven安装包的 .tar.gz后缀与.zip 后缀的区别

    (maven 3.3.9-bin)一个是class的文件包,由java文件编译成的,(maven 3.3.9-src )一个是java文件包即是源码(.tar.gz后缀)是linux的压缩包,(.zi ...

  6. php 中文转拼音首字母问题

    <?php /* 中文汉字转拼音首字母的PHP简易实现方法. 要求: 只能是GB2312码表里面中文字符 转换得到字符串对应的拼音首字母大写. 用法: echo zh2py::conv('Chi ...

  7. 从NPM到CNPM

    从NPM到CNPM   原文  http://www.cnblogs.com/hufeng/p/5166479.html 主题 npm 引用NPM网站上的一句话:npm loves you ! NPM ...

  8. 如何判断Socket已经关闭

    引子 前段时间我们的服务由于一台交换机网络出现故障,导致数据库连接不上,但是在数据库的连接超时参数设置不合理,connect timeout设置的过长,导致接口耗时增加.DB连接超时后线程未正常结束, ...

  9. ExceptionDemo

    功能: 利用struts.xml 捕获异常  不满足这三个值就报异常 1.web.xml <?xml version="1.0" encoding="UTF-8&q ...

  10. java设计模式(二)

    抽象工厂模式 对工厂同一抽象,便于扩展 interface Provider{ public Sender Send(); } class MailFactory implements Provide ...