十大企业网站排行榜,北京专业网站制作大概费用,wordpress企业教程,橙色的网站目录
一、指纹验证
1、什么是指纹验证
2、步骤
1#xff09;图像采集
2#xff09;图像预处理
3#xff09;特征提取
4#xff09;特征匹配
5#xff09;相似度比较
6#xff09;结果输出
二、案例实现
1、完整代码
2、实现结果
调试模式#xff1a;
三、…目录
一、指纹验证
1、什么是指纹验证
2、步骤
1图像采集
2图像预处理
3特征提取
4特征匹配
5相似度比较
6结果输出
二、案例实现
1、完整代码
2、实现结果
调试模式
三、指纹识别案例
1、展示指纹库图片
2、待验证指纹图
3、看完整代码
运行结果 一、指纹验证
1、什么是指纹验证 在OpenCV中指纹验证是一种图像处理技术用于识别和验证人类指纹。指纹是一种独特的生物特征每个人的指纹都具有独特的纹路和图案。指纹验证使用这些独特的特征来确认一个人的身份。 指纹验证主要包括两个步骤指纹图像的提取和指纹图像的匹配。 在指纹图像提取阶段OpenCV会处理输入的图像通过一系列的图像处理和特征提取算法提取出指纹图像中的纹路和图案。 在指纹图像匹配阶段OpenCV会将提取的指纹图像与一个或多个预先存储的指纹模板进行比对。比对过程中OpenCV会计算两幅指纹图像之间的相似度并根据相似度的阈值进行判断。 如果两幅指纹图像的相似度超过了设定的阈值OpenCV将判断它们属于同一个人否则判断它们属于不同的人。指纹验证可以应用于许多领域如安全系统、身份识别和刑事调查等。 2、步骤 1图像采集 通过摄像头或扫描仪等设备获取人的手指指纹图像。 2图像预处理 对采集到的指纹图像进行预处理包括图像增强、去噪、增强对比度等操作以便更好地提取指纹特征。 3特征提取 在预处理后的图像中提取指纹的特征常用的方法包括细化、方向计算、特征点定位等。 4特征匹配 将提取的指纹特征与预先存储的指纹模板进行匹配。匹配算法可以使用比对指纹特征向量之间的相似度如欧氏距离、汉明距离等。 5相似度比较 根据匹配得到的相似度进行比较判断两幅指纹图像是否属于同一个人。可以根据设定的阈值进行判断超过阈值则认为匹配成功否则认为匹配失败。 6结果输出 根据匹配结果输出验证结果可以是通过图像显示、文本信息或其他方式进行输出。 二、案例实现
1、完整代码
import cv2
def cv_show(name, img):cv2.imshow(name,img)cv2.waitKey(0)def verification(src,model): # 判断src图与模版图片model一致性# 创建SIFT特征提取器sift cv2.SIFT_create()kp1,des1 sift.detectAndCompute(src,None) # 输入参数为图片、掩码图像返回图片src的关键点坐标与关键点描述符kp2,des2 sift.detectAndCompute(model, None) # 计算模版图片的关键点和描述符# 创建FLANN匹配器FLANN是一个高效的算法用于在大规模数据集中执行最近邻搜索flann cv2.FlannBasedMatcher()# 使用k近邻匹配(des1中的每个描述符与des2中的最近两个描述符进行匹配)# 对des1中的每个描述符在des2中查找两个最近邻matches flann.knnMatch(des1,des2,k2) # 对待验证图与模版图进行匹配返回匹配成功的点之间的欧式距离、测试图像的索引、样本图像的索引# distance:匹配的特征点描述符的欧式距离数值越小也就说明俩个特征点越相近。
# queryIdx:测试图像的特征点描述符的下标(第几个特征点描述符)同时也是描述符对应特征点的下标。
# trainIdx:样本图像的特征点描述符下标同时也是描述符对应特征点的下标。# 进行比较筛选ok [] # 存放匹配成功的点的坐标for m,n in matches: # 遍历匹配成功点对应的两组欧氏距离m为最近的一对点n为次近的一对点# 根据lowes比率测试选择最佳匹配if m.distance 0.8 * n.distance: # 判断如果最近的比上次近的大小小于0.8那么认为这是个正确的匹配ok.append(m) # 将正确匹配的点存入列表# 统计逋过筛选的匹配数量num len(ok)if num 500: # 判断如果匹配数量大于500则认为匹配成功result 认证通过else:result 认证失败return resultif __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) # 放入函数进行判断result2 verification(src2,model)print(src1验证结果为,result1)print(src2验证结果为,result2)2、实现结果 调试模式 三、指纹识别案例
1、展示指纹库图片 2、待验证指纹图 3、看完整代码
import reimport cv2
import numpy as np
import sys
import osdef getNum(src, model): # 输入待验证图与模版图img1 cv2.imread(src)img2 cv2.imread(model)sift cv2.SIFT_create() # 创建sift特征提取器kp1,des1 sift.detectAndCompute(img1, None) # 提取待验证图片和模版图的关键点和描述符信息kp2,des2 sift.detectAndCompute(img2, None)flann cv2.FlannBasedMatcher() # 建立Flann匹配器其用来匹配大规模数据速度快matches flann.knnMatch(des1,des2,k2) # 使用匹配器的K近邻算法匹配待匹配图片与模版图片匹配两个最近距离ok []for m,n in matches: # 判断距离比例值是否小于0.8是则将这一对点存入列表if m.distance 0.8 *n.distance:ok.append(m)num len(ok) # 返回匹配成功的匹配数目return num获取指纹编号def getID(src, database):max 0for file in os.listdir(database): # 使用os.listdir读取database文件夹内的每一个文件model os.path.join(database, file) # 智能的将database的路径和file的路径结合成一个新的路径num getNum(src,model) # 将待验证图片src与提取出来的模版图model放入函数进行匹配返回匹配成功的点的对数print(文件名:,file,匹配数:,num)if num max: # 判断匹配成功的个数并不断更新max的值max num # 如果遇到最大匹配个数那么将这个个数更新到max值然后再更新模版图片的地址name fileID re.match(r^(\d)?\.([\S\s])$,name)[1] # 正则匹配模版图片的文件名前缀if max 100: # src图片不一定是库里面人的指纹判断匹配成功的数量是否小于100小于则说明库里没有对应的指纹ID 9999return ID # 返回对应的图片名称根据指纹编号获取对应姓名
def getName(ID):nameID {0:张三,1:李四,2:王五,3:赵六,4:朱老七,5:钱八,6:曹九,7:王二麻子,8:andy,9:Anna,9999:没找到}name nameID.get(int(ID))return name主函数
if __name__ __main__:src src.BMPdatabase databaseID getID(src, database)name getName(ID) # 将得到的ID导入函数判断待验证指纹的人的姓名print(识别结果为:,name)运行结果