【案例】—— 基于OpenCV方法的指纹验证
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)