栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python篇---两张图片动态更新,并做相似度比较

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python篇---两张图片动态更新,并做相似度比较

import os
import cv2


# 均值哈希算法
def aHash(img,shape=(10,10)):
    # 缩放为10*10
    img = cv2.resize(img, shape)
    # 转换为灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # s为像素和初值为0,hash_str为hash值初值为''
    s = 0
    hash_str = ''
    # 遍历累加求像素和
    for i in range(shape[0]):
        for j in range(shape[1]):
            s = s + gray[i, j]
    # 求平均灰度
    avg = s / 100
    # 灰度大于平均值为1相反为0生成图片的hash值
    for i in range(shape[0]):
        for j in range(shape[1]):
            if gray[i, j] > avg:
                hash_str = hash_str + '1'
            else:
                hash_str = hash_str + '0'
    return hash_str


# Hash值对比
def cmpHash(hash1, hash2,shape=(10,10)):
    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/(shape[0]*shape[1])


img_path = "cat_dog_resize"
path_list = os.listdir(img_path)
path_list.sort(key=lambda x:int(x.split(".")[0]))
print(path_list)


img1, img2 = "", ""
li = []

for i in path_list:
    if len(li) == 0:
        img1 = str(i)
        li.append(img1)
        print(img1)
    else:
        assert len(li) == 1
        img2 = str(i)
        li.append(img2)
        print("two pictures", li)
        # 相似度比较
        hash1 = aHash(cv2.imread(os.path.join(img_path, li[0])))
        hash2 = aHash(cv2.imread(os.path.join(img_path, li[1])))
        n = cmpHash(hash1, hash2)
        print('均值哈希算法相似度:', n)
        li.pop(0)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/953840.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号