【进阶OpenCV】 (6)--指纹识别

news/2024/10/17 2:29:10/

文章目录

  • 指纹识别
    • 1. 计算指纹间匹配点的个数
    • 2. 获取指纹编号
    • 3. 获取对应姓名
    • 4. 代码实现
  • 总结

指纹识别

假设,现在我们有一个小的指纹库,此时,有一个指纹图片需要我们识别是不是指纹库中某一个人的。如果是,是谁的呢?

本篇,我们就来完成这个小项目,通过指纹图片,找出是库中哪个人的。

  • 已有指纹库

在这里插入图片描述

  • 对应人名
nameID = {0:'张三',1:'李四',2:'王五',3:'赵六',4:'朱老七',5:'钱八',6:'铁栓',7:'铁柱',8:'金川',9:'银川',9999:"无此人"}
  • 源图像

在这里插入图片描述

1. 计算指纹间匹配点的个数

首先,如果要对指纹进行匹配的话,我们需要计算两个指纹图片的特征匹配点个数,特征相似度越高(特征匹配点数量多),两个指纹为同一个人的概率越大。

"""-----计算两个指纹间匹配点的个数-----"""
def getNum(src,model):img1 = cv2.imread(src)img2 = cv2.imread(model)# 创建SIFT特征提取器sift = cv2.SIFT_create() # orb_create()# 检测关键点和计算描述符(特征向量) 源图像kp1,des1 = sift.detectAndCompute(img1,None)# 检测关键点和计算描述符  模板图像kp2, des2 = sift.detectAndCompute(img2, 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)return num

2. 获取指纹编号

对于我们需要查找的指纹对象,我们自然是在指纹库中匹配到之后,获取它的信息,得到它的编号,从而得到它的信息。

"""-----获取指纹编号-----"""
def getID(src,database):max = 0for file in os.listdir(database):model = os.path.join(database,file)num = getNum(src,model)print("文件名:",file,"距离:",num)if num > max:max = numname = fileID = name[0]if max < 100: # src图片不一定是库里的指纹ID = 9999return ID

通过循环遍历指纹库中的每一张图片,计算每张图片与源图像的特征点数量,取出数量最多的图片,确定它是匹配成功的对象(当然最多的数量至少要超过一百个,否则没有)。

3. 获取对应姓名

def getName(ID):nameID = {0:'张三',1:'李四',2:'王五',3:'赵六',4:'朱老七',5:'钱八',6:'铁栓',7:'铁柱',8:'金川',9:'银川',9999:"无此人"}name = nameID.get(int(ID))return name

4. 代码实现

if __name__ == '__main__':src = 'src.bmp'database = "database"ID = getID(src,database)name = getName(ID)print("识别结果为:",name)
-------------------
识别结果为: 铁柱

总结

本篇介绍了,如何将源图像指纹同指纹库中的指纹进行匹配,并得到的对应指纹的信息。


http://www.ppmy.cn/news/1539604.html

相关文章

mysql用户管理(user表列信息介绍,本质,管理操作),数据库的权限管理(权限列表,权限操作)

目录 用户管理 介绍 user表 介绍 列信息 Host User *_priv authentication_string 用户管理的本质 操作 创建用户 删除用户 修改用户信息 修改密码 自己修改 root用户修改指定用户的密码 数据库的权限 权限列表 给用户授权 查看权限 回收权限 刷新权限 …

恺撒密码/置换密码案例

恺撒密码是移位密码的一个典型应用。恺撒密码据传是古罗马恺撒大帝用来保护重要军情的加密系统通过将字母按顺序推后3位起到加密作用。改进版的恺撒密码可以将一个字母利用字母表中该字母后面的第k个字母替代&#xff0c;k有 25 种可能的密钥。 案例&#xff1a;如果对明文“bo…

将SpringBoot的Maven项目打成jar包和war包

先需要明确的是&#xff0c;该项目打包的形态是可执行的jar包&#xff0c;还是在tomcat下运行的war包。 springboot自带的maven打包 1.创建一个springboot web项目 1.api控制层HelloWorld.java RestController RequestMapping("/hello") public class HelloWorld …

关于oracle数据库/加载机密码中含有特殊字符@:><等的解决办法

一、前提交代 我最近项目中需要通过把特定的数据文件(.gz文件)导入到oracle库中&#xff0c;一般情况我们是通过shell来实现该功能&#xff0c;然后再通过作业调度调用shell来实现。在shell中肯定要连接数据库和加载机&#xff08;存放数据文件的服务器&#xff09;,但是数据库…

foxy moveit2 小鱼

ros2 foxy 下安装moveit2 通过小鱼安装包(极简)&#xff1a; 通过小鱼配置好git连接&#xff0c;注意start.sh前面有一个. git clone https://gitee.com/ohhuo/d2lmoveit2_tutorials cd d2lmoveit2_tutorials . start.sh 注意观察上面的运行过程&#xff0c;如果没报错啥的&…

Elasticsearch Suggester

概述 Elasticsearch里设计了4 种类别的 Suggester Term Suggester&#xff1a;词条建议器。对给输入的文本进进行分词&#xff0c;为每个分词提供词项建议。Phrase Suggester&#xff1a;短语建议器&#xff0c;在term的基础上&#xff0c;会考量多个term之间的关系Completio…

【Android】在安卓中使用 `mobile-ffmpeg` 压缩后的视频,浏览器在线播放提示“没有找到支持的视频格式和 MIME 类型”的解决方案

在安卓中使用 mobile-ffmpeg 压缩后的视频&#xff0c;浏览器在线播放提示“没有找到支持的视频格式和 MIME 类型”的解决方案 你可能在安卓开发中使用了 mobile-ffmpeg 进行视频压缩&#xff0c;而当你尝试在浏览器中在线播放压缩后的视频时&#xff0c;看到提示&#xff1a;…

标题:民峰金融——引领全球金融投资新时代

随着全球经济的快速发展和金融市场的复杂化&#xff0c;投资者面临的选择和挑战也越来越多。民峰金融作为一家创新型的金融服务平台&#xff0c;致力于为全球投资者提供优质的金融解决方案&#xff0c;通过智能化的技术和多元化的资产配置&#xff0c;帮助投资者在全球市场中把…