大数据毕设项目 - opencv 图像识别 指纹识别 - python


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于机器视觉的指纹识别系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

1 课题背景

指纹是指人类手指上的条状纹路, 它们的形成依赖于胚胎发育时的环境。“没有2个完全相同的指纹”这一观点已经得到公认。指纹识别已经有了很长一段历史。

据考古学家证实:公元前6 000年以前, 指纹作为身份鉴别的工具已经在古叙利亚和中国开始应用。到了20世纪80年代,、光学扫描这2项技术的革新, 使得它们作为指纹取像的工具成为现实, 从而使指纹识别可以在其他领域中得以应用。

现在, 随着取像设备的引入及其飞速发展, 生物指纹识别技术的逐渐成熟, 可靠的比对算法的发现都为指纹识别技术提供了更广阔的舞台。

本项目实现了一种指纹识别系统,通过过滤过程来确定用户指纹是否与注册的指纹匹配。通过过滤技术对捕获的指纹进行处理,以从捕获的图像中去除噪声。去除噪声后的最终结果与注册的指纹进行特征匹配,以确定它们是否相同。

2 效果展示

在这里插入图片描述
在这里插入图片描述
3

3 具体实现

3.1 图像对比过滤

图像融合是一种图像增强方法,这里先融合两个图像便于特征点对比。利用的是opencv封装的函数

cv2.addWeighted()

相关代码

def apply_Contrast(img):
    alpha = 0.5 # assigned weight to the first image
    beta = 0.5 # assigned weight to the second image
    img_second = np.zeros(img.shape, img.dtype) # second image, copy of first one
    contrast = cv2.addWeighted(img, alpha, img_second, 0, beta) # applying contrast
    return contrast

3.2 图像二值化

简介

图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。二值图像每个像素只有两种取值:要么纯黑,要么纯白。
在这里插入图片描述
二值图像数据足够简单,许多视觉算法都依赖二值图像。通过二值图像,能更好地分析物体的形状和轮廓。
在计算机视觉里,一般用矩阵来表示图像。也就是说,无论你的图片看上去多么好吃,对计算机来说都不过是个矩阵而已。在这个矩阵里,每一个像素就是矩阵中的一个元素。在三通道的彩色图像中,这个元素是由三个数字组成的元组。而对于单通道的灰度图像来说,这个元素就是一个数字。这个数字代表了图像在这个点的亮度,数字越大像素点也就越亮,在常见的八位单通道色彩空间中,0代表全黑,255代表全白。

相关代码

def apply_Binarization(img):
    # if pixel value is greater then the threshold value it is assigned a singular color of either black or white
    _, mask = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY_INV)
    return mask

3.3 图像侵蚀细化

图像侵蚀(腐蚀)

腐蚀(Erosion)- shrink image regions,侵蚀是数学形态学领域的两个基本算子之一,另一个是膨胀。 它通常应用于二值图像,但是有些版本可用于灰度图像。 算子对二值图像的基本作用是侵蚀前景像素(通常为白色像素)区域的边界。 因此,前景像素的区域尺寸缩小,并且这些区域内的孔洞变大。
在这里插入图片描述
图像细化

细化(Thinning)- structured erosion using image pattern matching,细化是一种形态学操作,用于从二值图像中删除选定的前景像素,有点像侵蚀或开口。 它可以用于多种应用程序,但是对于骨架化特别有用。 在这种模式下,通常通过将所有行减少到单个像素厚度来整理边缘检测器的输出。 细化通常仅应用于二值图像,并产生另一个二值图像作为输出。

在这里插入图片描述
相关代码

def apply_Erosion(img):
    kernal = np.ones((3,3), np.uint8) # shape applied to image, 3x3 square shape is applied to contrast image
    erosion = cv2.erode(img, kernal, iterations=1) # erosion mask applied to the contrast image to thin fingerprint ridges
    return erosion

3.4 图像增强

图像增强的主要目的是提高图像的质量和可辨识度,使图像更有利于观察或进一步分析处理。图像增强技术一般通过对图像的某些特征,例如边缘信息、轮廓信息和对比度等进行突出或增强,从而更好的显示图像的有用信息,提高图像的使用价值。图像增强技术是在一定标准下,处理后的图像比原图像效果更好。

相关代码

def apply_highlighting(img):
    feature_points = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    Image_blue = np.array(feature_points, copy=True)

    white_px = np.asarray([255, 255, 255])
    blue_px = np.asarray([0  , 255  , 255  ])

    (row, col, _) = feature_points.shape

    for r in range(row):
        for c in range(col):
            px = feature_points[r][c]
            if all(px == white_px):
                Image_blue[r][c] = blue_px
    
    return Image_blue

3.5 特征点检测

指纹特征提取的主要目的是计算指纹核心点(Core)和细节点(Minutia)的特征信息。在提取指纹核心点时,采用的是Poincare Index算法,该算法的思路是在指纹图像某像素点区域内,按围绕该点的闭合曲线逆时针方向旋转一周,计算方向角度旋转变化量的和,最后以计算结果来寻找核心点。计算过程中如果某像素点的Poincare Index值为π则判定为核心点,然后便提取该点的坐标与方向场信息,记为P(Cx, Cy, θc)。

相关代码

def show_featurepoints(img):
    
    #show feature points found in fingerprint using orb detector
    orb  = cv2.ORB_create(nfeatures=1200)
    keypoints, descriptors = orb.detectAndCompute(img, None)
    featurepoint_img = img
    featurepoint_img = cv2.drawKeypoints(featurepoint_img, keypoints, None, color=(255, 0 ,0))

    return featurepoint_img

4 OpenCV

简介
Opencv(Open Source Computer Vision Library)是一个基于开源发行的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法,已成为计算机视觉领域最有力的研究工具。在这里我们要区分两个概念:图像处理和计算机视觉的区别:图像处理侧重于“处理”图像–如增强,还原,去噪,分割等等;而计算机视觉重点在于使用计算机来模拟人的视觉,因此模拟才是计算机视觉领域的最终目标。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS, 如今也提供对于C#、Ch、Ruby,GO的支持。

基础功能速查表
在这里插入图片描述

5 最后

🧿 选题指导, 项目分享: https://gitee.com/yaa-dc/warehouse-1/blob/master/python/README.md

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python-OpenCV可以用来识别矩形。可以通过使用cv2.findContours()函数来找到图像中的轮廓,然后使用cv2.approxPolyDP()函数来近似这些轮廓,最后使用cv2.drawContours()函数来绘制矩形。此外,还可以使用cv2.boundingRect()函数来获取矩形的位置和大小。 ### 回答2: Python-OpenCV 是一个非常流行的图像处理库,它可以用于各种各样的计算机视觉任务。其中一个常见的应用程序是矩形识别。简单来说,矩形识别是指在一张图像中识别出所有矩形的坐标,并对其进行必要的处理。 在 Python-OpenCV 中,矩形识别可以通过多种方式实现。其中一个常用的方法是使用轮廓检测。轮廓是一些连续的点组成的线条,它们沿着图像的边缘运行,并被用来识别物体的形状和大小。在 Python-OpenCV 中,可以使用 findContours() 函数来查找轮廓。 一旦找到了轮廓,我们就可以使用 approximation() 函数来近似为矩形。该函数选择最适合轮廓形状的最小矩形,该矩形可以是边界框或旋转矩形。通过使用这些技术,可以很容易地通过 Python-OpenCV 实现矩形识别。 实现矩形识别具有多种应用。例如,可以在计算机视觉系统中使用它来检测物体或区域。此外,可以在图像处理应用程序中使用矩形识别来自动裁剪图像或识别文档中的特定区域。总的来说,Python-OpenCV 和矩形识别是计算机视觉应用中非常振奋人心和有用的技术。 ### 回答3: 矩形识别是Python-OpenCV中常见的任务之一。在Python-OpenCV中,可以使用cv2.rectangle()函数进行矩形绘制。接下来是一些步骤,用于进行矩形识别: 1. 首先,从OpenCV库中导入cv2模块,并使用cv2.imread()函数读取一张图片。 2. 将图片转换为灰度图像。这可以使用cv2.cvtColor()函数完成。 3. 使用cv2.GaussianBlur()函数对原始图像进行模糊处理。这可以减少一些图像噪声。 4. 然后,可以使用cv2.Canny()函数检测边缘。这将产生一张二值化图像,其中端点会在物体的边缘上产生大量点。 5. 接下来,可以通过cv2.findContours()函数找到图像中所有的轮廓。 6. 对于每个找到的轮廓,可以使用cv2.approxPolyDP()函数来近似它们的形状。近似的多边形可以帮助找到矩形。 7. 对于近似的多边形,可以使用cv2.boundingRect()函数查找矩形的位置和大小。然后可以在图像上使用cv2.rectangle()函数绘制出矩形。 总之,使用Python-OpenCV进行矩形识别是一个四步骤的过程:灰度化、边缘检测、轮廓分析,矩形绘制。这些步骤都可以通过Python-OpenCV库中提供的函数轻松完成。但是对于复杂的场景,矩形识别还有许多待研究的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值