【案例】—— 基于OpenCV方法的指纹验证

一、案例整体介绍

  • 下图中上面一张指纹图片与下面两张图片中的其中一个指纹是同一个指纹
  • 分别将上面的指纹图片与下面的两张图片进行匹配验证
  • 在model(模板指纹图片)与验证的两张指纹图片的2次匹配中,分别需要提取出模板指纹图片与验证指纹图片的特征(特征检测),并检测关键点和计算描述符
  • 对检测出的描述符进行匹配,满足匹配阈值的要求则匹配成功

二、代码解释

  • 进行匹配验证的三个关键步骤如下:

    • 1.计算特征描述符 :使用如SIFT特征检测器 和描述子来计算图像中的特征点和对应的描述符。
    • 2.创建匹配器 :使用 cv2.BFMatcher() 创建一个暴力匹配器实例
    • 3.进行KNN匹配 :使用 knnMatch() 方法(实际上是BFMatcher的knnMatch()方法)来找到每个特征点的K个最佳匹配
  • 完整代码

    python 复制代码
    import cv2
    
    
    # 定义显示图片的函数
    def cv_show(name, img):
        cv2.imshow(name, img)
        cv2.waitKey(0)
    
    
    # 创建验证函数
    def verification(src, model):
        # 创建SIFT特征提取器
        sift = cv2.SIFT_create()
        # 对源指纹图像 检测关键点和计算描述符(特征向量)
        kp1, des1 = sift.detectAndCompute(src, None)
        # 对模板指纹图像 检测关键点和计算描述符
        kp2, des2 = sift.detectAndCompute(model, None)
        # 创建BFMatcher暴力匹配器
        BF = cv2.BFMatcher()
        # 使用k近邻匹配(des1中的每个描述符与des2中的最近2个描述符进行匹配)
        matches = BF.knnMatch(des1, des2, k=2)
    
        ok = []  # 用于存储被认为是"好"的匹配对(即满足最近距离与次近距离比值条件的匹配对)
        for m, n in matches:
            # 使用了固定的距离比率阈值(这里设为 0.8)来判断匹配的是否足够好,这个值可能需要根据具体图片数据进行调整
            if m.distance < 0.8 * n.distance:
                ok.append(m)
        # 统计通过筛选的匹配数量
        num = len(ok)
        if num >= 500:  # 如果有500及以上个最佳匹配结果则为匹配成功,这个值也需要根据图片数据和实际情况进行调整
            result = "认证通过"
        else:
            result = "认证失败"
        return result
    
    
    """ 读取三张指纹图片并显示 """
    src1 = cv2.imread("src1.bmp")
    cv_show('src1', src1)
    src2 = cv2.imread('src2.bmp')
    cv_show('src2', src2)
    model = cv2.imread('model.bmp')
    cv_show('model', model)
    
    """ 调用验证函数将两张验证图片与模板图片进行验证 """
    result1 = verification(src1, model)
    result2 = verification(src2, model)
    print("src1验证结果为:", result1)
    print("src2验证结果为:", result2)
  • 验证结果如下:

相关推荐
爱笑的眼睛117 分钟前
超越`cross_val_score`:深入剖析Scikit-learn交叉验证API的设计哲学与高阶实践
java·人工智能·python·ai
火山引擎开发者社区13 分钟前
两大模型发布!豆包大模型日均使用量突破 50 万亿 Tokens
大数据·人工智能
小尘要自信14 分钟前
Bright Data AI Scraper Studio:企业级AI爬虫解决方案,让数据采集更智能
人工智能·爬虫·通过ai自动化爬虫·prompt生产爬虫·云端爬虫平台
丝瓜蛋汤15 分钟前
chunking-free RAG简介
人工智能·深度学习·机器学习
虹科汽车电子21 分钟前
重新定义精密协作:低成本CAN FD如何赋予机器人「指尖智慧」?
人工智能·can总线·机器人灵巧手
王中阳Go36 分钟前
09 Go Eino AI应用开发实战 | Hertz Web 框架搭建
人工智能·后端·go
智驱力人工智能1 小时前
从人海战术到智能巡逻 城市街道违规占道AI识别系统的实践与思考 占道经营检测系统价格 占道经营AI预警系统
人工智能·安全·yolo·目标检测·无人机·边缘计算
STLearner1 小时前
VLDB 2025 | 时间序列(Time Series)论文总结(预测,异常检测,压缩,自动化等)
数据库·人工智能·深度学习·神经网络·机器学习·数据挖掘·时序数据库
GEO-optimize1 小时前
2025年末GEO服务商推荐甄选:综合实力测评及优选指南
人工智能·搜索引擎·geo
Ven%1 小时前
【AI大模型算法工程师面试题解析与技术思考】
人工智能·python·算法