当前位置: 首页 > news >正文

《OpenCV》—— 指纹验证

一、案例整体介绍

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

二、代码解释

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

    • 1.计算特征描述符:使用如SIFT特征检测器和描述子来计算图像中的特征点和对应的描述符。
      • 以下链接中的文章有对SIFT特征检测的介绍和实现方法
        • https://blog.csdn.net/weixin_73504499/article/details/142644255?spm=1001.2014.3001.5501
    • 2.创建匹配器:使用 cv2.BFMatcher() 创建一个暴力匹配器实例
    • 3.进行KNN匹配:使用 knnMatch() 方法(实际上是BFMatcher的knnMatch()方法)来找到每个特征点的K个最佳匹配
  • 完整代码

    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)
  • 验证结果如下:
    在这里插入图片描述


http://www.mrgr.cn/news/47823.html

相关文章:

  • 【Maui】导航栏样式调整
  • renben-openstack-使用操作
  • LabVIEW水轮发电机组振动摆度故障诊断
  • filebeat、kafka
  • 走进 Web3 社交:打破边界,重构人际关系网络
  • WD5105同步降压转换器:9.2V-95V宽电压输入,4.5A大电流输出,95%高效率,多重保护功能
  • lambok@Bulider后无法使用构造器
  • 双十一买什么充电宝?2024年双十一性价比高充电宝推荐
  • 不要慌,FastGPT 告诉我这是技术性调整,利好大 A!
  • 雷达图怎么绘制?!超简单,一次性告诉你Python和R绘制方法~~
  • 【Java】异常处理指南
  • C#语言集成外国人永久居留证查验接口的方法
  • centos celery 日志管理
  • linux系统,监控进程运行状态并自动重启崩溃后的进程的多种方法
  • prometheus client_java实现进程的CPU、内存、IO、流量的可观测
  • 从零开始了解云WAF,您的网站安全升级指南
  • 软件测试学习笔记丨质量门禁 - SonarQube
  • 大腾智能助力深圳储能企业实现数字化升级
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第二十八章 借助U盘或TF卡拷贝程序到开发板上
  • MyBatis 用法详解
  • 如何评估SaaS商城系统的稳定性和安全性
  • 大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
  • c++类与对象下速成
  • IterComp: 从模型图库中迭代合成感知反馈学习,用于文本到图像的生成
  • 【Vue3】 h()函数的用法
  • 9月CPI公布!美联储票委:对11月不降息保持开放态度