zoukankan      html  css  js  c++  java
  • 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))
    
    #相似度越小,说明两张图片越相似

    
    
  • 相关阅读:
    OpenERP 7.0 中文报表PDF乱码(WindowsXP)
    【转】CentOS 6.3 X64自动安装OpenERP 7.0脚本
    OE7设置菜单为什么这么少?
    PostgreSQL的备份和恢复
    PyPI镜像网站
    【转】Win 7 下源码运行OpenERP7.0
    OpenERP中的会计凭证
    OpenERP实施记录(14):收款处理
    OpenERP实施记录(13):出库处理
    intro.js 页面引导简单用法
  • 原文地址:https://www.cnblogs.com/zhouxuejia/p/10590058.html
Copyright © 2011-2022 走看看