【进阶OpenCV】 (5)--指纹验证

news2025/2/4 1:09:25

文章目录

  • 指纹验证
    • 1. 验证原理
    • 2. 读取图片
    • 3. 计算特征匹配点
  • 总结

指纹验证

指纹验证基于人类指纹的独特性和稳定性。每个人的指纹在图案、断点和交叉点上各不相同,这种唯一性和终生不变性使得指纹成为身份验证的可靠手段。指纹识别技术通过采集和分析指纹图像,提取指纹特征,并与预先存储的指纹特征进行比对,从而确认身份。

1. 验证原理

通过对比两个指纹之间的相似度,来确认两者是否匹配。其中,确认相似度是通过计算两个指纹之间的关键特征点数量,若是关键特征点数量匹配超过某个设定值,我们则认为他们是一个人的。

2. 读取图片

import cv2
def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)   
if __name__ == '__main__':
    src1 = cv2.imread("zw1.bmp")
    cv_show("zw1",src1)
    src2 = cv2.imread("zw2.bmp")
    cv_show("zw2", src2)
    model = cv2.imread("model.bmp")
    cv_show("model",model)

zw1

zw2

model

3. 计算特征匹配点

通过SIFT特征提取方法,计算两者之间的特征匹配点数量,若是数量达到设定值(此处设定为500),则认证通过,反之,认证失败。

def verification(src,model):
    # 创建SIFT特征提取器
    sift = cv2.SIFT_create()
    # 检测关键点和计算描述符(特征向量) 源图像
    kp1,des1 = sift.detectAndCompute(src,None)
    # 检测关键点和计算描述符  模板图像
    kp2, des2 = sift.detectAndCompute(model, None)
    # 创建FLANN匹配器
    flann = cv2.FlannBasedMatcher()
    # 使用K近邻匹配(des1中的每个描述符与des2中的最近两个描述符进行匹配)
    matches = flann.knnMatch(des1,des2,k=2)

    ok = []
    for m,n in matches:
        # 根据Lowe's比率测试,选择最佳匹配
        if m.distance < 0.8 * n.distance:
            ok.append(m)
    # 统计通过筛选的匹配数量
    num = len(ok)
    if num >= 500:
        result = "认证通过"
    else:
        result = "认证失败"
    return result
result1 = verification(src1,model)
result2 = verification(src2,model)
print("src1验证结果为:",result1)
print("src2验证结果为:", result2)
----------------
src1验证结果为: 认证通过
src2验证结果为: 认证失败

总结

本篇介绍了,通过使用SIFT特征特征提取方法,统计两者之间的特征匹配点数量,来验证指纹是否匹配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

39 C 语言枚举类型、枚举常量、枚举变量、枚举的遍历、枚举数组、枚举与 switch

目录 1 什么是枚举 2 定义枚举类型 2.1 语法格式 2.2 枚举元素的特点 2.3 案例演示 3 枚举变量 3.1 什么是枚举变量 3.2 定义枚举变量的多种方式 3.3 案例演示 1&#xff1a;标准版枚举类型 3.4 案例演示 2&#xff1a;简化版枚举类型 3.5 案例演示 3&#xff1a;匿…

【教学类-77-01】20241005青花瓷立体书

背景需求&#xff1a; 今天翻到小红书上一个青花瓷立体书 &#x1f1ed;&#x1f1f0;香港免费展览&#xff5c;青花瓷立体纸艺观展册&#x1f4d6; - 小红书 (xiaohongshu.com)https://www.xiaohongshu.com/discovery/item/6426a8fb000000001303653e?app_platformandroid&a…

买卖股票大合集

刷题刷题往死里刷。 121. 买卖股票的最佳时机 链接 121. 买卖股票的最佳时机 思路&#xff1a; 二次做所以有思路了&#xff0c; 从头遍历数组&#xff0c;维持一个最小值&#xff0c;且遇到一个值就计算差值&#xff0c;且维护这个最大值为答案。 class Solution {public …

文心智能体——制作你的专属AI

随着社会的进步和互联网技术的发展&#xff0c;人工智能领域正蓬勃发展。最近几年关于人工智能的新闻日渐增多并且成为了当代最大的热点&#xff0c;所有的领域都在引进AI、训练AI、使用AI&#xff0c;AI正逐步融入人们的生活。从前几年chatGPT大语言模型的横空出世&#xff0c…

【CSDN入门级教程】

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

Linux进程调度和进程切换

并行&#xff08;Parallel&#xff09; 含义&#xff1a;并行是指多个任务在同一时刻同时执行。 硬件要求&#xff1a;需要多个处理器&#xff08;如多核CPU&#xff09;或者多台计算设备来实现&#xff0c;这些执行单元能够真正地同时处理不同的任务。例如&#xff0c;一个具…

vite学习教程05、vite+vue2构建本地 SVG 图标

文章目录 前言一、构建本地SVG图标详细步骤1、安装开发依赖2、配置vite2.1、配置vite.config.js2.2、封装vite引入插件脚本 解决报错&#xff1a;can not find package fast-glob imported 二、实际应用应用1&#xff1a;未封装&#xff0c;直接vue应用应用2&#xff1a;封装vu…

Self-Operating Computer:基于PyAutoGui加AI实现无人“驾驶“电脑,让Python带你走近未来世界

近年来&#xff0c;AI 领域不断取得突破&#xff0c;特别是多模态模型的出现&#xff0c;为计算机无人操控带来了全新的可能性。 想象一下&#xff0c;你的电脑不再需要你手动操作&#xff0c;而是可以像人一样&#xff0c;理解你的指令&#xff0c;并自动执行一系列鼠标键盘操…

【word脚注】双栏设置word脚注,脚注仅位于左栏,右栏不留白

【word脚注】双栏设置word脚注&#xff0c;脚注仅位于左栏&#xff0c;右栏不留白 调整前效果解决方法调整后效果参考文献 调整前效果 调整前&#xff1a;脚注位于左下角&#xff0c;但右栏与左栏内容对其&#xff0c;未填充右下角的空白区域 解决方法 备份源文件复制脚注内…

MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)

目录 一、前言二、聚合查询2.1 聚合函数2.1.1 COUNT():统计所有行2.1.2 SUM(列名) 求和2.1.3 AVG()2.1.4 MAX()、MIN() 2.2 GROUP BY子句&#xff08;分组查询&#xff09;2.3 HAVING 三、联合查询3.1表的笛卡儿积3.2内连接3.2.1 例题一3.2.2 例题二 3.3外连接3.3.1 右外连接3.…

【每天学个新注解】Day 16 Lombok注解简解(十五)—@FieldNameConstants

FieldNameConstants 根据属性名生成常量类的常量。 1、如何使用 加在需要根据属性名生成常量的属性上。 2、代码示例 例&#xff1a; FieldNameConstants public class Test {private String iAmAField;private int andSoAmI;FieldNameConstants.Exclude private int asA…

Microsoft AI部门的CEO额备忘录

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

kafka-windows集群部署

kafka-windows集群部署目录 文章目录 kafka-windows集群部署目录前言一、复制出来四个kafka文件夹二、修改集群每个kafka的配置文件四、启动zookeeper&#xff0c;kafka集群 前言 部署本文步骤可以先阅读这一篇博客&#xff0c;这篇是关于单机kafka部署测试的。本文用到的文件…

VUE2常见问题以及解决方案汇总(不断更新中)

解决vue项目中 el-table 的 row-click 事件与行内点击事件冲突&#xff0c;点击事件不生效&#xff08;表格行点击事件和行内元素点击事件冲突&#xff09;需要阻止事件冒泡 问题描述 1.点击列的编辑按钮&#xff0c;会触发按钮本身事件&#xff0c;同时会触发行点击事件 2.点…

自用Proteus(8.15)常用元器件图示和功能介绍(持续更新...)

文章目录 一、 前言二、新建工程&#xff08;以51单片机流水灯为例&#xff09;2.1 打开软件2.2 建立新工程2.3 创建原理图2.4 不创建PCB布版设计2.5 创建成功2.6 添加元器件2.7 原理图放置完成2.8 编写程序&#xff0c;进行仿真2.9 仿真 三、常用元器件图示和功能介绍3.1 元件…

春秋云镜靶场之CVE-2022-28525

1.环境搭建 我们开启环境 可以看到题目提示我们是文件上传漏洞&#xff0c;那么我们就进行测试 2.开启环境 我们开启环境&#xff0c;可以看到是一个登录页面&#xff0c;登录页面:一种是弱口令&#xff0c;一种是自己进行注册&#xff0c;一种是SQL注入&#xff0c;一种是在…

【rCore OS 开源操作系统】Rust 异常处理

【rCore OS 开源操作系统】Rust 异常处理 前言 虽然人还在旅游ing&#xff0c;但是学习不能停止&#xff0c;所以还是写点博客记录下。 对于 Rust 的异常处理&#xff0c;我的感受是&#xff1a;晦涩难懂&#xff0c;繁琐难记。 但是没办法&#xff0c;正如一位故人所说的&…

算法 | 位运算(哈希思想)

位运算 &与两个位都为1时&#xff0c;结果才为1&#xff08;有0为0&#xff09;|或两个位都为0时&#xff0c;结果才为0&#xff08;有1为1&#xff09;^异或两个位相同为0&#xff0c;相异为1~取反0变1&#xff0c;1变0<<左移各二进位全部左移若干位&#xff0c;高…

【FPGA开发】Modelsim如何给信号分组

前面已经发布过了一篇关于 Modelsim 的入门使用教程&#xff0c;针对的基本是只有一个源文件加一个仿真tb文件的情况&#xff0c;而实际的工程应用中&#xff0c;往往是顶层加多个底层的源文件结构&#xff0c;如果不对信号进行一定的分组&#xff0c;就会显得杂乱不堪&#xf…

LSM6DSV16X基于MLC智能笔动作识别(4)----中断获取智能笔状态

LSM6DSV16X基于MLC智能笔动作识别.4--中断获取智能笔状态 概述视频教学样品申请源码下载硬件准备开启INT中断参考驱动程序配置中断主程序演示 概述 LSM6DSV16X 支持通过中断&#xff08;INT&#xff09;输出 MLC&#xff08;机器学习核&#xff09;识别的动作。具体来说&#…