Python dHash算法怎么使用
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"Python dHash算法怎么使用",在日常操作中,相信很多人在Python dHash算法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"P
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
耶加雪菲
广州万易互联网科技有限公司
互联网 科技创业
互联网科技革命
善班互联网科技有限公司
润盈互联网科技
融贸通互联网科技
猫创互联网科技
互联网科技公司名称
安控科技rtu产品工业互联网
西藏七维空间互联网科技有限公司
移动互联网科技股
重庆威客帮互联网科技
深圳市罗太互联网科技有限公司
玉溪新华互联网科技好不好
互联网时代的科技公司
科技互联网的核心竞争力
上海科技产业互联网平台
智帮互联网科技公司最近动向
小牛互联网科技有限公司地址
新浪科技互联网
科技大学互联网专业好不好
海南科技产业互联网平台
新华互联网科技2019
中国的互联网科技企业的崛起
小米互联网科技园设置
互联网公司科技股
移动互联网科技公司
互联网5g黑科技有哪些
互联网科技博主张洲