#四种检测方法
import os
import math
import cv2
import numpy as np
import matplotlib.pyplot as plt
#均值哈希
os.chdir("F:\\视频\\")
#均值哈希
def aHash(img): # 缩放为8*8
img = cv2.resize(img, (8, 8))
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 cmphash(hash1,hash2):
n=0
if len(hash1)!=len(hash2):
return -1
for i in range(len(hash1)):
if hash1[i]!=hash2[i]:
n=n+1;
n=n/len(hash1)
return n
#差值哈希算法
def dHash(img):
# 缩放8*8
img = cv2.resize(img, (9, 8))
# 转换灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.resize(img, (32, 32))
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'