• python-两个图片相似度算法


    # -*- coding: UTF-8 -*-
    """
         作者:zxj
         版本:1.0
         日期:19-3-24
    """
    import cv2
    import numpy as np
    #均值哈希算法
    def aHash(img):
        # 缩放为8*8
        img = cv2.resize(img, (8, 8), interpolation=cv2.INTER_CUBIC)
        # 转换为灰度图
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # s为像素和初值为0,hash_str为hash值初值为''
        s = 0
        hash_str = ''
        # 遍历累加求像素和
        for i in range(8):
            for j in range(8):
                s = s + gray[i, j]
        # 求平均灰度
        avg = s / 64
        # 灰度大于平均值为1相反为0生成图片的hash值
        for i in range(8):
            for j in range(8):
                if gray[i, j] > avg:
                    hash_str = hash_str + '1'
                else:
                    hash_str = hash_str + '0'
        return hash_str
    #差值感知算法
    def dHash(img):
        #缩放8*8
        img=cv2.resize(img,(9,8),interpolation=cv2.INTER_CUBIC)
        #转换灰度图
        gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        hash_str=''
        #每行前一个像素大于后一个像素为1,相反为0,生成哈希
        for i in range(8):
            for j in range(8):
                if   gray[i,j]>gray[i,j+1]:
                    hash_str=hash_str+'1'
                else:
                    hash_str=hash_str+'0'
        return hash_str
    
    #Hash值对比
    def cmpHash(hash1,hash2):
        n=0
        #hash长度不同则返回-1代表传参出错
        if len(hash1)!=len(hash2):
            return -1
        #遍历判断
        for i in range(len(hash1)):
            #不相等则n计数+1,n最终为相似度
            if hash1[i]!=hash2[i]:
                n=n+1
        return n
    
    img1=cv2.imread('A.jpg')
    img2=cv2.imread('C.jpg')
    hash1= aHash(img1)
    hash2= aHash(img2)
    print(hash1)
    print(hash2)
    n=cmpHash(hash1,hash2)
    print ('均值哈希算法相似度:'+ str(n))
    
    hash1= dHash(img1)
    hash2= dHash(img2)
    print(hash1)
    print(hash2)
    n=cmpHash(hash1,hash2)
    print ('差值哈希算法相似度:'+ str(n))
    
    #相似度越小,说明两张图片越相似

    
    
  • 相关阅读:
    让iis支持中文文件名(转)
    为你的mail server增加SPF记录
    sql清除事务日志命令
    收集的ASP.NET中常用正则表达式
    在线支付类封装
    提供一个操作Windows服务类库(基本函数)
    简单测试Newtonsoft.json JObject内存占用分配
    图片和文字同行 对齐方式
    常用的css(持续跟新中....)
    Effective Ways to Develop Web Part
  • 原文地址:https://www.cnblogs.com/zhouxuejia/p/10590058.html
Copyright © 2020-2023  润新知