目录
7.1 网页中加入均值哈希算法
1.将定义均值哈希算法的代码加入main.py中
代码如下:
def genFrame():#写一个函数,放之前的片段。函数如果放在下面可能找不到,那就往上挪一挪
v_path='static/ghz.mp4'
image_save='static/pic'
if not(os.path.exists(image_save)):#如果没有这个文件
os.mkdir(image_save)#就新建一个文件
cap=cv2.VideoCapture(v_path)
fc=cap.get(cv2.CAP_PROP_FRAME_COUNT)
for i in range(int(fc)):#帧数变为整数
_,img=cap.read()
cv2.imwrite('static/pic/image{}.jpg'.format(i),img)
# 均值哈希算法
def aHash(img):
# 缩放为8*8
img = cv2.resize(img, (8, 8))
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
s = 0
hash_str = '' # s为像素和初值为0,hash_str为hash值初值为''
# 遍历累加求像素和
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
# Hash值对比
def cmpHash(hash1,hash2):
n=0
print(hash1)
print(hash2)
# 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
2.定义哈希算法比较图片相似度
先通过代码,创建文件夹;
存储第一张图片(image0);
注意:img1和img2需要读取之前pic(视频全部分镜)文件里的图片,否则找不到而报错
代码如下:
def shot():#哈希算法
v_path = 'static/ghz.mp4'
image_save = 'static/hash'
if not (os.path.exists(image_save)):
os.mkdir(image_save)
filelist = os.listdir('static\pic')
img1 = cv2.imread('static\pic\im