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

文章目录

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

指纹识别

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

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

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

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

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

python 复制代码
"""-----计算两个指纹间匹配点的个数-----"""
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. 获取指纹编号

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

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

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

3. 获取对应姓名

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

4. 代码实现

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

总结

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

相关推荐
LaughingZhu18 小时前
Product Hunt 每日热榜 | 2026-02-14
数据库·人工智能·经验分享·神经网络·搜索引擎·chatgpt
大模型探员18 小时前
告别答非所问!深度解析文档切分如何决定RAG的搜索上限
人工智能
民乐团扒谱机18 小时前
【读论文】深度学习中的卷积算术指南 A guide to convolution arithmetic for deep learning
人工智能·深度学习·神经网络·机器学习·cnn·卷积神经网络·图像识别
byzh_rc18 小时前
[深度学习网络从入门到入土] 拓展 - Inception
网络·人工智能·深度学习
阿里巴巴淘系技术团队官网博客18 小时前
从应用架构的视角看退小宝AI助手落地现状
人工智能·架构
寻星探路18 小时前
【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机
java·开发语言·jvm·人工智能·python·算法·ai
Elastic 中国社区官方博客18 小时前
DevRel 通讯 — 2026 年 2 月
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·jina
一个天蝎座 白勺 程序猿19 小时前
飞算JavaAI:从情绪价值到代码革命,智能合并项目与定制化开发新范式
人工智能·ai·自动化·javaai
田里的水稻19 小时前
FA_融合和滤波(FF)-联邦滤波(FKF)
人工智能·算法·数学建模·机器人·自动驾驶
摘星编程19 小时前
解析CANN ops-transformer的FlashAttention算子:注意力机制的内存优化
人工智能·深度学习·transformer