Python dHash算法怎么使用
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍"Python dHash算法怎么使用",在日常操作中,相信很多人在Python dHash算法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"P
千家信息网最后更新 2025年11月07日Python dHash算法怎么使用
这篇文章主要介绍"Python dHash算法怎么使用",在日常操作中,相信很多人在Python dHash算法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python dHash算法怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
说明
1、缩小图片:缩小到9*8,这样它就有72个像素点。
2、转换成灰度图。
3、计算差异值:dHash算法在相邻像素之间工作,因此每行9个像素之间产生8个不同的差异,总共8行,产生64个差异值。
4、获取指纹:如果左像素比右像素亮,记录为1,否则为0。
5、最后对比两张图片的指纹,获得汉明距离。
实例
# -*- coding: utf-8 -*-# 利用python实现多种方法来实现图像识别 import cv2import numpy as npfrom matplotlib import pyplot as plt # 最简单的以灰度直方图作为相似比较的实现def classify_gray_hist(image1,image2,size = (256,256)): # 先计算直方图 # 几个参数必须用方括号括起来 # 这里直接用灰度图计算直方图,所以是使用第一个通道, # 也可以进行通道分离后,得到多个通道的直方图 # bins 取为16 image1 = cv2.resize(image1,size) image2 = cv2.resize(image2,size) hist1 = cv2.calcHist([image1],[0],None,[256],[0.0,255.0]) hist2 = cv2.calcHist([image2],[0],None,[256],[0.0,255.0]) # 可以比较下直方图 plt.plot(range(256),hist1,'r') plt.plot(range(256),hist2,'b') plt.show() # 计算直方图的重合度 degree = 0 for i in range(len(hist1)): if hist1[i] != hist2[i]: degree = degree + (1 - abs(hist1[i]-hist2[i])/max(hist1[i],hist2[i])) else: degree = degree + 1 degree = degree/len(hist1) return degree # 计算单通道的直方图的相似值def calculate(image1,image2): hist1 = cv2.calcHist([image1],[0],None,[256],[0.0,255.0]) hist2 = cv2.calcHist([image2],[0],None,[256],[0.0,255.0]) # 计算直方图的重合度 degree = 0 for i in range(len(hist1)): if hist1[i] != hist2[i]: degree = degree + (1 - abs(hist1[i]-hist2[i])/max(hist1[i],hist2[i])) else: degree = degree + 1 degree = degree/len(hist1) return degree # 通过得到每个通道的直方图来计算相似度def classify_hist_with_split(image1,image2,size = (256,256)): # 将图像resize后,分离为三个通道,再计算每个通道的相似值 image1 = cv2.resize(image1,size) image2 = cv2.resize(image2,size) sub_image1 = cv2.split(image1) sub_image2 = cv2.split(image2) sub_data = 0 for im1,im2 in zip(sub_image1,sub_image2): sub_data += calculate(im1,im2) sub_data = sub_data/3 return sub_data # 平均哈希算法计算def classify_aHash(image1,image2): image1 = cv2.resize(image1,(8,8)) image2 = cv2.resize(image2,(8,8)) gray1 = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY) gray2 = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY) hash2 = getHash(gray1) hash3 = getHash(gray2) return Hamming_distance(hash2,hash3) def classify_pHash(image1,image2): image1 = cv2.resize(image1,(32,32)) image2 = cv2.resize(image2,(32,32)) gray1 = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY) gray2 = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY) # 将灰度图转为浮点型,再进行dct变换 dct1 = cv2.dct(np.float32(gray1)) dct2 = cv2.dct(np.float32(gray2)) # 取左上角的8*8,这些代表图片的最低频率 # 这个操作等价于c++中利用opencv实现的掩码操作 # 在python中进行掩码操作,可以直接这样取出图像矩阵的某一部分 dct1_roi = dct1[0:8,0:8] dct2_roi = dct2[0:8,0:8] hash2 = getHash(dct1_roi) hash3 = getHash(dct2_roi) return Hamming_distance(hash2,hash3) # 输入灰度图,返回hashdef getHash(image): avreage = np.mean(image) hash = [] for i in range(image.shape[0]): for j in range(image.shape[1]): if image[i,j] > avreage: hash.append(1) else: hash.append(0) return hash # 计算汉明距离def Hamming_distance(hash2,hash3): num = 0 for index in range(len(hash2)): if hash2[index] != hash3[index]: num += 1 return num if __name__ == '__main__': img1 = cv2.imread('10.jpg') cv2.imshow('img1',img1) img2 = cv2.imread('11.jpg') cv2.imshow('img2',img2) degree = classify_gray_hist(img1,img2) #degree = classify_hist_with_split(img1,img2) #degree = classify_aHash(img1,img2) #degree = classify_pHash(img1,img2) print degree cv2.waitKey(0)到此,关于"Python dHash算法怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
直方图
算法
通道
像素
灰度
相似
学习
图像
图片
差异
之间
指纹
方法
更多
重合度
汉明
帮助
不同
实用
最低
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
dm数据库导出至excel
华为网络技术工程师面试经历
贵金属交易平台软件开发
浙江智慧团建软件开发软件
广州新选网络技术有限公司
沈阳航空航天大学文献数据库
新加坡智慧城市数据库系统
网络安全知识有关图片
宁夏网络安全宣传日
企业级软件开发 java
粮油产品数据库
数据库技术与应用实验小结
数据库插入数据是注册数据吗
第三方软件开发正规平台
海东软件开发联系方式
防汛网络安全预案
华三服务器登录失败未授权
青之峰网络技术有限公司
做网络技术都不正常吗
前端软件开发有多少知识点
hp 迷你服务器
网络安全风险等级划分标准
电脑网络技术专业技能
搞笑网络安全稳定风险隐患
网络安全的五禁止是什么
光纤和服务器哪个好
gui下拉列表联动数据库
网络安全高级技师资格证报考条件
软件开发学什么最好
网络安全需要算法