欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

opencv圖像處理之指紋驗(yàn)證的實(shí)現(xiàn)

 更新時間:2025年04月02日 10:41:31   作者:不吃香菜?  
本文主要介紹了opencv圖像處理之指紋驗(yàn)證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、簡介

在當(dāng)今數(shù)字化時代,生物識別技術(shù)作為一種安全、便捷的身份驗(yàn)證方式,正廣泛應(yīng)用于各個領(lǐng)域。指紋識別作為生物識別技術(shù)中的佼佼者,因其獨(dú)特性和穩(wěn)定性,成為了眾多應(yīng)用場景的首選。今天,我們就來深入探討如何利用 OpenCV 庫實(shí)現(xiàn)一個簡單的指紋識別系統(tǒng),并詳細(xì)解讀相關(guān)代碼。

二、具體案例實(shí)現(xiàn)

本例是將src1和src2與模板model進(jìn)行匹配的一個代碼實(shí)現(xiàn)

具體代碼如下

import cv2
def cv_show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
def verification(src, model):
    # 創(chuàng)建SIFT特征提取器
    sift = cv2.SIFT_create()
    # 檢測關(guān)鍵點(diǎn)和計算描述符(特征向量) 源圖像
    kp1, des1 = sift.detectAndCompute(src, None)     # 第二個參數(shù):掩膜
    # 檢測關(guān)鍵點(diǎn)和計算描述符 模板圖像
    kp2, des2 = sift.detectAndCompute(model, None)
    # 創(chuàng)建FLANN匹配器
    flann = cv2.FlannBasedMatcher()
    # 使用k近鄰匹配(des1中的每個描述符與des2中的最近兩個描述符進(jìn)行匹配)
    matches = flann.knnMatch(des1, des2, k=2)
# distance:匹配的特征點(diǎn)描述符的歐式距離,數(shù)值越小也就說明倆個特征點(diǎn)越相近。
# queryIdx:測試圖像的特征點(diǎn)描述符的下標(biāo)(第幾個特征點(diǎn)描述符),同時也是描述符對應(yīng)特征點(diǎn)的下標(biāo)。
# trainIdx:樣本圖像的特征點(diǎn)描述符下標(biāo), 同時也是描述符對應(yīng)特征點(diǎn)的下標(biāo)。
    # 進(jìn)行比較篩選
    ok = []
    for m, n in matches:#m是最接近點(diǎn)的匹配結(jié)果,n是次接近點(diǎn)的匹配結(jié)果
        # 根據(jù)Lowe's比率測試,選擇最佳匹配
        if m.distance < 0.8 * n.distance:
            ok.append(m)
    # 統(tǒng)計通過篩選的匹配數(shù)量
    num = len(ok)
    if num >= 500:
        result = "認(rèn)證通過"
    else:
        result = "認(rèn)證失敗"
    return result
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)
    result2= verification(src2, model)
    print("src1驗(yàn)證結(jié)果為:", result1)
    print("src2驗(yàn)證結(jié)果為:", result2)

1. 圖像顯示函數(shù)

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

這個函數(shù)的作用是使用 OpenCV 的imshow函數(shù)顯示圖像,并通過waitKey(0)等待用戶按下任意鍵后關(guān)閉圖像窗口。name參數(shù)是窗口的名稱,img參數(shù)是要顯示的圖像數(shù)據(jù)

2. 指紋驗(yàn)證函數(shù)

def verification(src, model):
    # 創(chuàng)建SIFT特征提取器
    sift = cv2.SIFT_create()
    # 檢測關(guān)鍵點(diǎn)和計算描述符(特征向量) 源圖像
    kp1, des1 = sift.detectAndCompute(src, None)     # 第二個參數(shù):掩膜
    # 檢測關(guān)鍵點(diǎn)和計算描述符 模板圖像
    kp2, des2 = sift.detectAndCompute(model, None)
    # 創(chuàng)建FLANN匹配器
    flann = cv2.FlannBasedMatcher()
    # 使用k近鄰匹配(des1中的每個描述符與des2中的最近兩個描述符進(jìn)行匹配)
    matches = flann.knnMatch(des1, des2, k=2)
# distance:匹配的特征點(diǎn)描述符的歐式距離,數(shù)值越小也就說明倆個特征點(diǎn)越相近。
# queryIdx:測試圖像的特征點(diǎn)描述符的下標(biāo)(第幾個特征點(diǎn)描述符),同時也是描述符對應(yīng)特征點(diǎn)的下標(biāo)。
# trainIdx:樣本圖像的特征點(diǎn)描述符下標(biāo), 同時也是描述符對應(yīng)特征點(diǎn)的下標(biāo)。
    # 進(jìn)行比較篩選
    ok = []
    for m, n in matches:#m是最接近點(diǎn)的匹配結(jié)果,n是次接近點(diǎn)的匹配結(jié)果
        # 根據(jù)Lowe's比率測試,選擇最佳匹配
        if m.distance < 0.8 * n.distance:
            ok.append(m)
    # 統(tǒng)計通過篩選的匹配數(shù)量
    num = len(ok)
    if num >= 500:
        result = "認(rèn)證通過"
    else:
        result = "認(rèn)證失敗"
    return result

首先,創(chuàng)建 SIFT 特征提取器對象sift。

然后,分別對輸入的待驗(yàn)證指紋圖像src和模板指紋圖像model使用sift.detectAndCompute方法檢測關(guān)鍵點(diǎn)并計算描述符。detectAndCompute方法的第一個參數(shù)是圖像,第二個參數(shù)是掩膜(這里設(shè)為None)。

接著,創(chuàng)建 FLANN 匹配器對象flann,并使用flann.knnMatch方法對兩個圖像的描述符進(jìn)行匹配,k=2表示為每個描述符找到兩個最近的匹配。

之后,通過遍歷匹配結(jié)果,根據(jù) Lowe's 比率測試(即m.distance < 0.8 * n.distance)篩選出最佳匹配點(diǎn),存入ok列表。

最后,統(tǒng)計ok列表的長度,即匹配點(diǎn)的數(shù)量。如果數(shù)量大于等于 500,則認(rèn)為認(rèn)證通過,返回 "認(rèn)證通過";否則返回 "認(rèn)證

3. 主函數(shù)

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)
    result2= verification(src2, model)
    print("src1驗(yàn)證結(jié)果為:", result1)
    print("src2驗(yàn)證結(jié)果為:", result2)

在主函數(shù)中,首先使用cv2.imread函數(shù)讀取三張圖像,分別是src1.BMP、src2.BMP(待驗(yàn)證指紋圖像)和model.BMP(模板指紋圖像)。然后使用cv_show函數(shù)依次顯示這三張圖像。接著,分別對src1和src2調(diào)用verification函數(shù)進(jìn)行指紋驗(yàn)證,并將結(jié)果存儲在result1和result2中。最后,打印出兩個待驗(yàn)證指紋圖像的驗(yàn)證結(jié)果。

4、運(yùn)行結(jié)果

三、總結(jié)

通過上述代碼,我們成功實(shí)現(xiàn)了一個基于 OpenCV 的簡單指紋驗(yàn)證系統(tǒng)。這個系統(tǒng)能夠根據(jù)指紋圖像的特征匹配情況判斷指紋是否匹配。然而,實(shí)際應(yīng)用中,還存在一些可以優(yōu)化和改進(jìn)的地方。例如,指紋圖像的預(yù)處理(如去噪、增強(qiáng)對比度等)可以進(jìn)一步提高特征提取的準(zhǔn)確性;調(diào)整匹配算法的參數(shù)或嘗試其他更先進(jìn)的匹配算法,可以提高匹配的精度和效率。希望本文的介紹和代碼示例能夠幫助你對 OpenCV 指紋驗(yàn)證技術(shù)有更深入的理解,也期待你在實(shí)際應(yīng)用中不斷探索和完善,將指紋驗(yàn)證技術(shù)應(yīng)用到更多有價值的場景中。

到此這篇關(guān)于opencv圖像處理之指紋驗(yàn)證的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)opencv 指紋驗(yàn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python相對包導(dǎo)入報“Attempted?relative?import?in?non-package”錯誤問題解決

    python相對包導(dǎo)入報“Attempted?relative?import?in?non-package”錯誤

    這篇文章主要介紹了python相對包導(dǎo)入報“Attempted?relative?import?in?non-package”錯誤,本文要在原理上解決?python當(dāng)中相對包導(dǎo)入出現(xiàn)的問題,需要的朋友可以參考下
    2023-02-02
  • 基于Python計算圓周率pi代碼實(shí)例

    基于Python計算圓周率pi代碼實(shí)例

    這篇文章主要介紹了基于Python計算圓周率pi代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Python+ChatGPT實(shí)戰(zhàn)之進(jìn)行游戲運(yùn)營數(shù)據(jù)分析

    Python+ChatGPT實(shí)戰(zhàn)之進(jìn)行游戲運(yùn)營數(shù)據(jù)分析

    最近ChatGPT蠻火的,今天試著讓ta用Python語言寫了一篇數(shù)據(jù)分析實(shí)戰(zhàn)案例。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • Python新手入門之解釋器的安裝

    Python新手入門之解釋器的安裝

    相信有很多小伙伴還不會安裝Python解釋器,今天特地整理了本篇文章,文章有非常詳細(xì)的圖文示例,對不會安裝的小伙伴很有幫助,需要的朋友可以參考下
    2021-06-06
  • 一看就懂得Python的math模塊

    一看就懂得Python的math模塊

    今天小編就為大家分享一篇關(guān)于Python的math模塊,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Python錯誤+異常+模塊總結(jié)

    Python錯誤+異常+模塊總結(jié)

    這篇文章主要介紹了Python錯誤+異常+模塊總結(jié),在編程時遇見錯誤信息在所難免,Python中會也有很多種錯誤信息,常見的兩種就是語法錯誤和邏輯錯誤,下文我們就來總結(jié)一下那些常見的異常,需要的小伙伴可以參考一下
    2022-05-05
  • ubuntu?20.04系統(tǒng)下如何切換gcc/g++/python的版本

    ubuntu?20.04系統(tǒng)下如何切換gcc/g++/python的版本

    這篇文章主要給大家介紹了關(guān)于ubuntu?20.04系統(tǒng)下如何切換gcc/g++/python版本的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ubuntu具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-12-12
  • Python利用wxPython制作一個有趣的驗(yàn)證碼生成器

    Python利用wxPython制作一個有趣的驗(yàn)證碼生成器

    這篇文章主要為大家詳細(xì)介紹了Python如何利用wxPython制作一個簡單有趣的驗(yàn)證碼生成器,文中的示例代碼講解詳細(xì),需要的小伙伴可以了解一下
    2023-04-04
  • jupyter notebook的安裝與使用詳解

    jupyter notebook的安裝與使用詳解

    這篇文章主要介紹了jupyter notebook的安裝與使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 教你學(xué)會通過python的matplotlib庫繪圖

    教你學(xué)會通過python的matplotlib庫繪圖

    今天教大家如何學(xué)會通過python的matplotlib庫繪圖,文中有非常詳細(xì)的圖文解說及代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05

最新評論