图像哈希库

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中加入字符串组以创建复合字符串   java系统甚至不点击“下一步”或“上一步”按钮就将我返回到上一页,而不是进入下一页   java如何在arrayList中获取特定列的不同值   CXF GZIP REST JAVA   Java:使用大量半恒定标志检查优化循环中的循环?   java如何在两个应用程序之间进行会话管理?   java SVG文件使用蜡染(但没有轴线)转换为PNG   使用协议缓冲区和内部数据模型的java   java如何在logtag 安卓中打印和查看字符串的值   javascript如何在NodeJs中应用Java/Spring的分层架构?   java Spring URL在JSP中编码不正确   模式对话框后面的java工具提示   java WSRPC生成日历对象而不是日期   在对象外部无法识别类变量   java将图像从文件读/写到BuffereImage的最快方法?   JavaSpring数据存储库对具有不同Id的子类使用抽象超类   安全在Java 5.0上运行web应用程序服务器有危险吗?