图像哈希库

ImageHash的Python项目详细描述


用python编写的图像哈希库。imagehash支持:

TravisCoveralls

基本原理

为什么我们不能使用MD5、SHA-1等?

不幸的是,我们不能在实现中使用加密哈希算法。由于加密散列算法的性质,输入文件中的微小更改将导致本质上不同的散列。在图像指纹的情况下,我们实际上希望相似的输入也有相似的输出散列。

要求

基于PIL/枕头图像,numpy和scipy.fftpack(用于phash) 通过pypi轻松安装。

基本用法

>>> from PIL import Image
>>> import imagehash
>>> hash = imagehash.average_hash(Image.open('test.png'))
>>> print(hash)
d879f8f89b1bbf
>>> otherhash = imagehash.average_hash(Image.open('other.bmp'))
>>> print(otherhash)
ffff3720200ffff
>>> print(hash == otherhash)
False
>>> print(hash - otherhash)
36

演示脚本find_similar_images演示了如何在目录中找到类似的图像。

托管在github的源代码:https://github.com/JohannesBuchner/imagehash

更改日志

  • 4.0:已将二进制实现更改为十六进制实现,因为前一个实现因散列大小不同而中断。此更改破坏了与以前存储的哈希的兼容性;若要从旧编码转换它们,请使用“old_hex_to_hash”函数。
  • 3.5:图像数据处理速度加快
  • 3.2:whash现在还处理比散列图像小的图像
  • 3.0:dhash有一个缺陷:它是垂直计算像素差异的,而不是水平计算的。
    我把它改成了dHash。旧功能可用作dhash_vertical。
  • 2.0:添加whash
  • 1.0:初始ahash、dhash、phash实现。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java GridBagLayout不填充区域   java Memozied Fibonacci未运行与常规Fibonacci解决方案   Java Web启动未启动问题   Java中异常和if-then的区别   java从命令提示符运行批处理文件获取错误   socket在Java中验证SSL证书的公共名称   如何在JAVA中检查字符串数组中的相等字   用java语言将音频文件转换成文本文件的语音识别   java为什么foo(1,2,3)没有传递给varargs方法foo(对象…)作为整数[]   java通过蓝牙将奇怪的数据从Arduino传输到Android   java ContainerRequestFilter获取空entitystream   java如何从安卓 studio中删除不兼容类型错误   基本Java错误   在Spring引导中使用REST API时发生java错误   javascript通过从SQL查询派生的URL打开页面