使用Python,OpenCV进行图像哈希
使用Python,OpenCV进行图像哈希
- 1. 效果图
- 2. 原理
- 3. 源代码
- 参考
这篇博客将介绍图像哈希,感知哈希以及这些算法如何用于(快速)确定图像的视觉内容是否相同或相似。并实现了差异散列,一个常见的感知散列算法(1)非常快,而(2)非常准确。以此来判断图片是否发生变化。
1. 效果图
2. 原理
图像哈希或者感知哈希的步骤是: 基于图像的内容,构建唯一标识输入图像的散列值。
通过利用图像散列算法,可以在恒定的时间内或最差,O(Log n)时间找到近似相同的图像。
为什么传统哈希不起作用
传统的md5、sha等密码散列算法的本质:更改文件中的单个位会导致不同的哈希。 实质上图像哈希希望只有单个像素变化的,认为图像没有变化,或者图像缩放也认为没有变化;
差异哈希(DHASH)的好处:
1)输入图像的宽高比更改(由于忽略了纵横比),图像哈希不会改变;
2)调整亮度或对比度(1)不会改变哈希值或(2)只会稍微改变它,确保散列将靠近;
3)差异散列非常快且准确;通常使用 汉明距离 来比较哈希值。两个汉明距离很小的哈希意味着两个散列是相同的,并且两个图像也是相同的/感知相似的。
3. 源代码
# USAGE
# python hash.py --images images# 导入必要的包
from imutils import paths
import argparse
import time
import sys
import cv2# 设置图像散列为8,表示构建8*8=64位哈希值
def dhash(image, hashSize=8):# 缩放输入图像,增加一列以计算水平梯度差值resized = cv2.resize(image, (hashSize + 1, hashSize))# 计算相邻水平梯度列像素差值diff = resized[:, 1:] > resized[:, :-1]# 转换图像差异为hashreturn sum([2 ** i for (i, v) in enumerate(diff.flatten()) if v])# 构建命令行参数及解析
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--images", required=True,help="dataset of images to search through (i.e., the haytack)")
args = vars(ap.parse_args())# 获取hastach、needle文件图片
print("[INFO] computing hashes for images...")
hashmapsPaths = list(paths.list_images(args["images"]))# 移除文件名中的\
if sys.platform != "win32":hashmapsPaths = [p.replace("\\", "") for p in hashmapsPaths]# 初始化存放图像名及其hash值的map,并计时
hashmaps = {}
start = time.time()# 遍历hashmaps路径
for p in hashmapsPaths:# 从磁盘加载图像image = cv2.imread(p)# 如果图像为None,则跳过if image is None:continue# 转换图像为灰度图,并计算图像hash值image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)imageHash = dhash(image)# 更新hashmaps字典l = hashmaps.get(imageHash, [])l.append(p)hashmaps[imageHash] = l# 展示hash耗时及hashmaps照片数,开始计算needles文件夹的图像hash值
print("[INFO] processed {} images in {:.2f} seconds".format(len(hashmaps), time.time() - start))
print("[INFO] computing hashes for needles...")for k,v in hashmaps.items():print("[INFO] {}: {}".format(k,v))
参考
- https://www.pyimagesearch.com/2017/11/27/image-hashing-opencv-python/
使用Python,OpenCV进行图像哈希相关推荐
- Python+OpenCV:图像修复(Image Inpainting)
Python+OpenCV:图像修复(Image Inpainting) 理论 Most of you will have some old degraded photos at your home ...
- Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)
Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features) 理论 We know SIFT us ...
- Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)
Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...
- Python+OpenCV:图像Shi-Tomasi角点检测器
Python+OpenCV:图像Shi-Tomasi角点检测器 理论 The scoring function in Harris Corner Detector was given by: Inst ...
- Python+OpenCV:图像Harris角点检测(Harris Corner Detection)
Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...
- Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...
- Python+OpenCV:图像轮廓
Python+OpenCV:图像轮廓 轮廓是什么? 轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色和强度. 轮廓线是形状分析.目标检测和识别的重要工具. 为了获得更好的精度,可 ...
- Python+OpenCV:图像金字塔
Python+OpenCV:图像金字塔 理论 通常情况下,我们使用固定大小的图像.但在某些情况下,我们需要处理(相同的)不同分辨率的图像. 例如,当搜索图像中的某些东西时,比如脸,我们不确定该物体在图 ...
- Python+OpenCV:图像梯度
Python+OpenCV:图像梯度(Image Gradients) 理论 OpenCV提供了三种类型的梯度滤波器或高通滤波器,Sobel, Scharr和Laplacian. 1. Sobel和S ...
最新文章
- 3.请执行命令取出linux中eth0的IP地址(考试题答案系列)
- 《Java程序书面采访猿收藏》之 instanceof的作用是什么
- ProjectEuler 005题
- CentOS安全配置(转)
- 找不到redis得pid文件_电脑提示Windows找不到文件?试试这两个技巧,轻松解决!...
- 【项目介绍】搜索引擎
- 查看dataloader的大小_一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
- 带有Spring Security的OAuth 2.0快速指南
- android模拟按键问题总结[使用IWindowManager.injectKeyEvent方法](转)
- MAC安装chromedriver碰到的问题:mv: rename chromedriver to /usr/bin/chromedriver: Operation not permitted
- Cocos2d-x移植Android 常见问题处理办法
- 杭电计算机2012年硕士研究生笔试详解
- JAVA创建会话的方法_javaweb学习——会话技术(二)
- ios13 无法传参_Win版iOS13越狱最新消息汇总丨拼音字体更新
- Linux_无法运行可执行文件
- java下载服务器资源
- 概率论与数理统计——总结
- 【年薪百万之IT界大神成长之路零】年薪百万之IT界大神成长之路
- Required request body is missing 错误解决
- 建房遮阳标准的计算机方法,农村建房遮阴计算标准,看看怎么计算?