sift算法实现指纹验证

  本代码将使用SIFT特征检测和FLANN匹配器来比较两枚指纹是否与模板指纹匹配。

模板指纹

需要匹配的指纹

1.定义显示图像的函数

import cv2

def cv_show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)

2.定义计算匹配点个数的函数

def verification(src, model):
    sift = cv2.xfeatures2d.SIFT_create() # 创建一个SIFT检测器对象,用于检测图像中的关键点
    kp1,des1 = sift.detectAndCompute(src, None)
    kp2,des2 = sift.detectAndCompute(model, None)
# 对src和model图像分别检测关键点和计算描述符。关键点存储在kp1和kp2中,描述符存储在des1和des2中

    flann = cv2.FlannBasedMatcher() # 创建一个FLANN匹配器对象,用于高效地匹配描述符
    matches = flann.knnMatch(des1, des2, k = 2) 
# 使用FLANN匹配器对des1和des2进行K近邻匹配,k=2表示为每个描述符找到两个最近邻

    ok = []
    for m,n in matches:
        if m.distance < 0.8 * n.distance:
            ok.append(m)
#通过距离比率测试筛选匹配点,只有当最佳匹配的距离小于次佳匹配距离的0.8倍时,才认为是一个良好的匹配,并将这些匹配存储在列表ok中

    num = len(ok)
    if num >= 500:
        result = "认证通过"
    else:
        result = "认证失败"
# 计算好的匹配点的数量,并根据数量是否大于等于500来判断认证是否通过
    return result

3.调用函数

if __name__ == "__main__":
    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)
    print('模板1的结果:', result1)
    result2 = verification(src2, model)
    print('模板2的结果:', result2)
# 对每张源图像src1和src2与模板图像model调用verification函数,打印出匹配结果

4.运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值