最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

opencv銀行卡號(hào)識(shí)別的項(xiàng)目實(shí)踐

 更新時(shí)間:2025年04月14日 11:22:51   作者:2201_75491841  
本文主要介紹了opencv銀行卡號(hào)識(shí)別的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

OpenCV(Open Source Computer Vision Library)是一個(gè)開源的計(jì)算機(jī)視覺庫(kù),主要用于圖像和視頻處理、目標(biāo)檢測(cè)、特征提取、3D重建以及機(jī)器學(xué)習(xí)任務(wù)。它支持多種編程語(yǔ)言(如C++、Python),提供豐富的算法和工具,可用于人臉識(shí)別、物體檢測(cè)、運(yùn)動(dòng)跟蹤、圖像增強(qiáng)等應(yīng)用,廣泛應(yīng)用于工業(yè)檢測(cè)、自動(dòng)駕駛、安防監(jiān)控、醫(yī)療影像等領(lǐng)域。其高效性和跨平臺(tái)特性使其成為計(jì)算機(jī)視覺開發(fā)的核心工具之一。在日常生活中,我們可以通過opencv來(lái)識(shí)別銀行卡卡號(hào),實(shí)現(xiàn)銀行卡的分類。

以下是我們用來(lái)識(shí)別檢測(cè)的銀行卡圖片

以及用于模板處理的模板圖片

以下是代碼實(shí)現(xiàn)

import numpy as np
import argparse
import cv2
import myutils

#設(shè)置參數(shù)
ap=argparse.ArgumentParser()
ap.add_argument('-i','--image',required=True,help='path to iuput image')
ap.add_argument('-t','--template',required=True,help='path to template OCR-A image')
#vars(ap.parse_args()):解析命令行參數(shù)并將其轉(zhuǎn)換為字典形式
args=vars(ap.parse_args())


FIRST_NUMBER={
    '3':'American',
    '4':'Visa',
    '5':'MasterCard',
    '6':'Discover'
}


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


a=args['template']

'''--------模板圖像中數(shù)字的定位處理-----------'''
img=cv2.imread(args['template'])
cv_show('img',img)

ref=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv_show('ref',ref)
#cv2.threshold():對(duì)灰度圖像進(jìn)行閾值處理,將其轉(zhuǎn)換為二值圖像,cv2.THRESH_BINARY_INV 表示反二進(jìn)制閾值。
ref=cv2.threshold(ref,10,255,cv2.THRESH_BINARY_INV)[1]
cv_show('ref',ref)
#查找并排序模板圖像中的輪廓
_,refCnts,hierarchy=cv2.findContours(ref,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img,refCnts,-1,(0,255,0),3)

cv_show('img',img)
#myutils.sort_contours():對(duì)輪廓進(jìn)行從左到右的排序。
refCnts=myutils.sort_contours(refCnts,method='left-to-right')[0]

digits={}
#遍歷排序后的輪廓,提取每個(gè)數(shù)字的 ROI(感興趣區(qū)域),并將其調(diào)整為固定大?。?7x88),存儲(chǔ)在字典 digits 中,鍵為數(shù)字的索引。
#enumerate() 是 Python 中的一個(gè)內(nèi)置函數(shù)
# 它的作用是 為可迭代對(duì)象添加索引,使得在遍歷時(shí)可以同時(shí)訪問索引和元素。
for (i,c) in enumerate(refCnts):
    (x,y,w,h)=cv2.boundingRect(c)

    roi=ref[y:y+h,x:x+w]

    roi=cv2.resize(roi,(57, 88))

    cv_show('ro',roi)

    digits[i]=roi
print(digits)

'''----------信用卡的圖像處理---------------------'''
#信用卡信息處理

image=cv2.imread(args['image'])
image=myutils.resize(image,width=300)
cv_show('image',image)
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv_show('gray',gray)

#初始化卷積核
rectKernel=cv2.getStructuringElement(cv2.MORPH_RECT,(9,3))
sqKernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))

#頂帽操作
tophat=cv2.morphologyEx(gray,cv2.MORPH_TOPHAT,rectKernel)
cv_show('tophat',tophat)


#-----找到數(shù)字邊框---------
# 1、通過閉操作(先膨脹,再腐蝕)將數(shù)字連在一起
closeX=cv2.morphologyEx(tophat,cv2.MORPH_CLOSE,rectKernel)
cv_show('closeX',closeX)
#THRESH_OTSU會(huì)自動(dòng)尋找到合適的閾值,適合雙峰,需要把閾值參數(shù)設(shè)置為0
thresh=cv2.threshold(closeX,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
cv_show('thresh',thresh)
# 再來(lái)一個(gè)閉操作
# thresh1=cv2.morphologyEx(thresh,cv2.MORPH_CLOSE,sqKernel)
# cv_show('thresh1',thresh1)

#計(jì)算輪廓
_,threshCnts,h=cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts=threshCnts
cur_img=image.copy()
cv2.drawContours(cur_img,cnts,-1,(0,255,0),3)
cv_show('cur_img',cur_img)

#遍歷輪廓,找到數(shù)字部分像素區(qū)域
locs=[]
for (i,c) in enumerate(cnts):
    (x,y,w,h)=cv2.boundingRect(c)#計(jì)算外接矩形
    ar=w/float(h)
    #選擇合適區(qū)域
    if ar>2.5 and ar<4.0:
        if (w>40 and w<55) and (h>10 and h<20):
            locs.append((x,y,w,h))

#將輪廓從左到右排序
locs=sorted(locs,key=lambda x:x[0])

output=[]

for (i,(gX,gY,gW,gH)) in enumerate(locs):
    groupOutput=[]
    group=gray[gY-5:gY+gH+5,gX-5:gX+gW+5]

    cv_show('group',group)

    group=cv2.threshold(group,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]

    cv_show('group',group)

    group_,digitCnts,hierarchy=cv2.findContours(group.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

    digitCnts=myutils.sort_contours(digitCnts,method='left-to-right')[0]

    for c in digitCnts:

        (x,y,w,h)=cv2.boundingRect(c)

        roi=group[y:y+h,x:x+w]

        roi=cv2.resize(roi,(57,88))
        cv_show('roi',roi)

        #使用模塊匹配,計(jì)算匹配得分

        scores=[]
        ##在模板中計(jì)算每一個(gè)得分
        #digits 是一個(gè)字典
        #digits.items() 方法會(huì)返回一個(gè)包含字典中所有鍵值對(duì)的可迭代對(duì)象,其中每個(gè)元素是一個(gè)元組,元組的第一個(gè)元素是鍵,第二個(gè)元素是對(duì)應(yīng)的值。
        for (digit,digitROI) in digits.items():
            ## 模板匹配
            #cv2.matchTemplate此函數(shù)用于在一幅圖像里查找與給定模板最匹配的區(qū)域
            # roi:代表輸入圖像,也就是要在其中查找模板的圖像。
            # digitROI:代表模板圖像,也就是你想要在輸入圖像中查找的部分。
            # cv2.TM_CCOEFF:表示匹配方法,這里采用的是相關(guān)性系數(shù)匹配法。
            #函數(shù)會(huì)返回一個(gè)二維的 NumPy 數(shù)組
            result=cv2.matchTemplate(roi,digitROI,cv2.TM_CCOEFF)
            #cv2.minMaxLoc 函數(shù)用于在一個(gè)單通道的矩陣(通常是圖像或模板匹配結(jié)果)中查找最小值、最大值以及它們對(duì)應(yīng)的位置。
            #該函數(shù)返回一個(gè)包含四個(gè)值的元組,依次為:
            # 矩陣中的最小值。
            # 矩陣中的最大值。
            # 最小值所在的位置(以元組 (x, y) 形式表示)。
            # 最大值所在的位置(以元組 (x, y) 形式表示)
            (_,score,_,_)=cv2.minMaxLoc(result)

            scores.append(score)
        #np.argmax 用于返回?cái)?shù)組中最大值所在的索引。
        #例如,如果 scores = [1, 5, 3],那么 np.argmax(scores) 會(huì)返回 1,
        #str 是 Python 內(nèi)置函數(shù),用于將一個(gè)對(duì)象轉(zhuǎn)換為字符串類型。
        groupOutput.append(str(np.argmax(scores)))

    # 畫出來(lái)
    cv2.rectangle(image,(gX-5,gY-5),(gX+gW+5,gY+gH+5),(0,0,255),1)
    # cv2.putText()是OpenCV庫(kù)中的一個(gè)函數(shù),用于在圖像上添加文本。
    cv2.putText(image,''.join(groupOutput),(gX,gY-15),cv2.FONT_HERSHEY_SIMPLEX,0.65,(0,0,255),2)

    output.extend(groupOutput)

print('Credit Card Type:{}'.format(FIRST_NUMBER[output[0]]))
print('Credit Card#:{}'.format(''.join(output)))

cv2.imshow('image',image)
cv2.waitKey(0)

打印輸出結(jié)果如下圖所示

到此這篇關(guān)于opencv銀行卡號(hào)識(shí)別的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)opencv銀行卡號(hào)識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python樹的重建實(shí)現(xiàn)示例

    Python樹的重建實(shí)現(xiàn)示例

    樹的重建是一種從給定的遍歷序列中恢復(fù)原樹結(jié)構(gòu)的算法,本文就來(lái)介紹一下Python樹的重建實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • PyTorch中Tensor的數(shù)據(jù)類型和運(yùn)算的使用

    PyTorch中Tensor的數(shù)據(jù)類型和運(yùn)算的使用

    這篇文章主要介紹了PyTorch中Tensor的數(shù)據(jù)類型和運(yùn)算的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析

    python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析

    這篇文章主要介紹了python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • python使用pandas按照行數(shù)分割表格

    python使用pandas按照行數(shù)分割表格

    本文主要介紹了python使用pandas按照行數(shù)分割表格,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • python中實(shí)現(xiàn)根據(jù)坐標(biāo)點(diǎn)位置求方位角

    python中實(shí)現(xiàn)根據(jù)坐標(biāo)點(diǎn)位置求方位角

    這篇文章主要介紹了python中實(shí)現(xiàn)根據(jù)坐標(biāo)點(diǎn)位置求方位角方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python可視化實(shí)現(xiàn)KNN算法

    python可視化實(shí)現(xiàn)KNN算法

    這篇文章主要為大家詳細(xì)介紹了python可視化實(shí)現(xiàn)KNN算法,通過繪圖工具M(jìn)atplotlib包可視化實(shí)現(xiàn)機(jī)器學(xué)習(xí)中的KNN算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 基于python實(shí)現(xiàn)微信好友數(shù)據(jù)分析(簡(jiǎn)單)

    基于python實(shí)現(xiàn)微信好友數(shù)據(jù)分析(簡(jiǎn)單)

    本文主要介紹利用網(wǎng)頁(yè)端微信獲取數(shù)據(jù),實(shí)現(xiàn)個(gè)人微信好友數(shù)據(jù)的獲取,并進(jìn)行一些簡(jiǎn)單的數(shù)據(jù)分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-02-02
  • python 爬取豆瓣網(wǎng)頁(yè)的示例

    python 爬取豆瓣網(wǎng)頁(yè)的示例

    這篇文章主要介紹了python 爬取豆瓣網(wǎng)頁(yè)的示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python如何讀取PDF文檔(或TXT)

    Python如何讀取PDF文檔(或TXT)

    這篇文章主要介紹了Python如何讀取PDF文檔(或TXT),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python web框架fastapi中間件的使用及CORS跨域問題

    Python web框架fastapi中間件的使用及CORS跨域問題

    fastapi "中間件"是一個(gè)函數(shù),它在每個(gè)請(qǐng)求被特定的路徑操作處理之前,以及在每個(gè)響應(yīng)之后工作,它接收你的應(yīng)用程序的每一個(gè)請(qǐng)求,下面通過本文給大家介紹Python web框架fastapi中間件的使用及CORS跨域問題,感興趣的朋友一起看看吧
    2024-03-03

最新評(píng)論

休宁县| 延吉市| 湄潭县| 黄山市| 繁昌县| 玉环县| 农安县| 都兰县| 中牟县| 承德县| 汝阳县| 乳源| 九寨沟县| 都匀市| 咸宁市| 石阡县| 江川县| 玉田县| 调兵山市| 上栗县| 甘泉县| 托克托县| 巢湖市| 望奎县| 吉安市| 渑池县| 大新县| 金华市| 蒙城县| 阜康市| 桂平市| 黑山县| 东丽区| 昌都县| 茶陵县| 上饶县| 东台市| 区。| 桦甸市| 米易县| 杨浦区|