OpenCV查找相似图片-Hash均值对比 -Hash差值对比(不靠谱)

本文探讨了使用OpenCV进行图片相似度检测的两种Hash值对比方法:Hash均值对比和Hash差值对比。作者指出这两种方法效果不佳,并提供了详细的操作步骤,以示例代码展示其工作原理,旨在避免读者走弯路。
📄 AI 智能文档扫描仪 -

📄 AI 智能文档扫描仪 -

图片编辑
Python
PyTorch

基于OpenCV透视变换算法,提供文档自动扫描与矫正服务,支持边缘检测、歪斜拉直及去阴影增强,集成WebUI,纯算法零依赖版

《OpenCV系列教程》
《深度学习-如何提高数据集质量》

项目位置:OpenCV-Sample
代码位置:42-Hashcompare.py

关于Hash值计算图片相似度的研究我感觉到头了,我对他的调查还有这篇:
《Python imagehash中的均值哈希、感知哈希、梯度哈希、小波哈希对比图片相似度》

免责声明

这是两个不靠谱的对比方式,不靠谱为啥还写出来呢?我看有人用这个方式我就来调查一下,发现不靠谱所以展示给大家,避免一起浪费时间。
先看测完图片吧,效果很差,类似卷积操作或者pool操作。

Hash均值对比:

1.第一步对灰度图进行reset操作,我这里设置的8x8,获得了8x8的矩阵。
2.求8x8的均值。
3.操作矩阵,大于均值的设置成为1,小于均值的设置成为0。
4.通过上一步的值1,、值0操作,获取了图像特质的Hash值。
5.求相同位置为1的个数的。

Hash差值对比:

1.第一步对灰度图进行reset操作,我这里设置的8x8,获得了8x8的矩阵。
2.将8x8的矩阵进行拉直处理。
3.对一维矩阵进行差值比较,如果自身大于后一个,值1,否则值0 例如:【10, 20, 5, 100】转换过完为【0, 1, 0, 1】,最后一个为没得比较直接设置成了1。
4.求相同位置为1的个数的。

代码如下:

import cv2 as cv
import numpy as np

fileList = ['./res/hashsame.jpeg', './res/hashsame1.jpeg', './res/hashsame2.jpeg', './res/hashsame3.jpeg',
            './res/face.jpeg']

def hashAVGComp(imgList):
    hashList = []
    for img in imgList:
        avg = np.mean(img)
        #小于均值的值0
        img[img <= avg] = 0
        #大于均值的值1
        img[img > avg] = 1
        hashList.append(img.flatten())

    for i in range(len(hashList)):
        for j in range(i + 1, len(hashList)):
            # 这里的与运算就是查找相同位置为1的,sum统计总共有几个。
            print(np.sum(hashList[i] & hashList[j]), fileList[i], fileList[j])

def hashSubComp(imgList):
    hashList = []
    for img in imgList:
        fla = img.flatten()
        # 这里比较奇妙,也没理由,如果自身大于后一个,值1,否则值0 例如:【10, 20, 5, 100】转换过完为【0, 1, 0, 1】,最后一个为没得比较直接设置成了1。
        for i in range(len(fla) - 1):
            if fla[i] <= fla[i+1]:
                fla[i] = 0
            else:
                fla[i] = 1
        fla[i+1] = 0
        hashList.append(fla)

    for i in range(len(hashList)):
        for j in range(i + 1, len(hashList)):
            print(np.sum(hashList[i] & hashList[j]), fileList[i], fileList[j])

def main():
    imgList = []
    for f in fileList:
        #图片以灰度单通道的方式加载
        img = cv.imread(f, 0)
        imgList.append(cv.resize(img, (8, 8), cv.INTER_CUBIC))

    hashSubComp(imgList)
    print('****************')
    hashAVGComp(imgList)

if __name__ == "__main__":
    main()

您可能感兴趣的与本文相关的镜像

📄 AI 智能文档扫描仪 -

📄 AI 智能文档扫描仪 -

图片编辑
Python
PyTorch

基于OpenCV透视变换算法,提供文档自动扫描与矫正服务,支持边缘检测、歪斜拉直及去阴影增强,集成WebUI,纯算法零依赖版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值