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))

#相似度越小,說明兩張圖片越相似

 

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM