imagehash库:图像哈希与相似度检测

简介

imagehash是一个Python库,用于生成图像的哈希值,并比较图像之间的相似度。这个库提供了多种哈希算法,包括平均哈希(Average Hash)、感知哈希(Perceptual Hash)、差异哈希(Difference Hash)和颜色哈希(Color Hash)。这些哈希值可以用来快速识别相似或相同的图像,特别适用于图像去重、版权检测和图像检索等场景。

安装

在使用imagehash之前,您需要先安装这个库。可以通过pip安装:

pip install imagehash

基本用法

1. 导入库

首先,导入必要的库:

from PIL import Image
from imagehash import average_hash

2. 计算图像哈希

使用imagehash计算图像的哈希值非常简单。以下是如何计算一个图像的平均哈希值:

# 打开图像文件
image = Image.open("1.jpg")

# 计算平均哈希值
hash_value = average_hash(image)

# 打印哈希值
print(hash_value)

3. 比较图像相似度

imagehash库提供了一个方便的方法来比较两个图像的相似度,即计算它们的哈希值之间的汉明距离(Hamming distance):

# 计算另一个图像的哈希值
image2 = Image.open("2.jpg")
hash_value2 = average_hash(image2)

# 计算两个哈希值之间的汉明距离
distance = hash_value - hash_value2

# 打印汉明距离
print(f"汉明距离: {distance}")

汉明距离越小,表示两个图像越相似。

其他哈希算法

imagehash库提供了多种哈希算法,每种算法都有其特点和适用场景。

1. 感知哈希(Perceptual Hash)

感知哈希考虑了图像的视觉特征,对于图像的缩放、旋转和亮度变化具有较好的鲁棒性:

from imagehash import phash

# 计算感知哈希值
hash_value = phash(image)

# 打印哈希值
print(hash_value)

2. 差异哈希(Difference Hash)

差异哈希通过比较相邻像素的差异来生成哈希值,适用于检测图像的微小变化:

from imagehash import dhash

# 计算差异哈希值
hash_value = dhash(image)

# 打印哈希值
print(hash_value)

3. 颜色哈希(Color Hash)

颜色哈希主要基于图像的颜色分布:

from imagehash import colorhash

# 计算颜色哈希值
hash_value = colorhash(image)

# 打印哈希值
print(hash_value)

比较各算法的计算速度

import time
import functools
from PIL import Image
from imagehash import phash, average_hash, dhash, colorhash


def timeit(func):
    """计算函数用时的装饰器 """

    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()  # 记录开始时间
        result = func(*args, **kwargs)  # 执行函数
        end_time = time.time()  # 记录结束时间
        print(f"函数{func.__name__} 用时 {end_time - start_time:.4f} 秒")
        return result

    return wrapper


@timeit
def get_average_hash(img_file):
    # 获取平均哈希
    return average_hash(Image.open(img_file))


@timeit
def get_phash(img_file):
    # 获取感知哈希
    return phash(Image.open(img_file))


@timeit
def get_dhash(img_file):
    # 获取差异哈希
    return dhash(Image.open(img_file))


@timeit
def get_colorhash(img_file):
    # 获取颜色哈希
    return colorhash(Image.open(img_file))


if __name__ == '__main__':
    file = "1.png"
    get_average_hash(file)
    get_phash(file)
    get_dhash(file)
    get_colorhash(file)

经过多次测试,计算用时:平均哈希=差异哈希<感知哈希<颜色哈希。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值