亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python+OpenCV實現(xiàn)信用卡數(shù)字識別的方法詳解

 更新時間:2022年09月18日 15:31:12   作者:泡泡怡  
這篇文章主要介紹了如何利用python?opencv實現(xiàn)信用卡數(shù)字識別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、模板圖像處理

(1)灰度圖、二值圖轉(zhuǎn)化

template = cv2.imread('C:/Users/bwy/Desktop/number.png')
template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
cv_show('template_gray', template_gray)
 
# 形成二值圖像,因為要做輪廓檢測
ret, template_thresh = cv2.threshold(template_gray, 127, 255, cv2.THRESH_BINARY_INV)
cv_show('template_thresh', template_thresh)

結(jié)果如圖所示:

(2)進行輪廓提取接受參數(shù)為二值圖像,得到數(shù)字的信息,RETR_EXTERNAL 就是只是需要外輪廓,cv2.CHAIN_APPROX_SIMPLE只保留終點坐標。 

template_contours, hierarchy = cv2.findContours(template_thresh,
                                                cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(template,template_contours,-1,(0,0,255),2)
cv_show('template',template)

-1:代表所的輪廓,我們這里畫出來10個輪廓。(可以用代碼驗證一下)

print(np.array(refCnts,-1,(0,0,255),3)

結(jié)果:10

結(jié)果如圖所示:

 (3)我們需要將輪廓進行大小排序(我們拿到的數(shù)據(jù)模板不一定向我們前面所展示的從0-9按順序的,所以我們需要進行排序、resize。

def contours_sort(contours, method=0):
    if method == 0:
        contours = sorted(contours, key=lambda x: cv2.boundingRect(x)[0])
    else:
        contours = sorted(contours, key=lambda x: cv2.boundingRect(x)[0], reverse=True)
    return contours

我們調(diào)用函數(shù)#將輪廓排序,位置從小到大就是數(shù)字的信息。然后我們遍歷模板,使用cv2.boudingRect獲得輪廓的位置,提取位置對應(yīng)的圖片,與數(shù)字結(jié)合構(gòu)造成模板字典,dsize = (55, 88),統(tǒng)一大小。

dict_template = {}
for i, contour in enumerate(template_contours):
    # 畫出其外接矩陣,獲得其位置信息
    x, y, w, h = cv2.boundingRect(contour)
    template_img = template_thresh[y:y + h, x:x + w]
    # 使用cv2.resize變化模板的大小
    template_img = cv2.resize(template_img, dsize)
    cv_show('template_img{}'.format(i), template_img)
    dict_template[i] = template_img 

 結(jié)果如圖所示:

。。。。。。。。。。

 二、信用卡圖片預(yù)處理

(1)進行灰度值

card_gray = cv2.cvtColor(card, cv2.COLOR_BGR2GRAY)
cv_show('card_gray',card_gray)

(2)形成二值圖像,因為要做輪廓檢測,解釋參數(shù):THRESH_OTSU會自動尋找合適的閾值,適合雙峰,需要閾值參數(shù)設(shè)置為零 二值化

card_thresh =cv2.threshold(card_gray,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)[1]
cv_show('card_thresh',card_thresh)

結(jié)果如圖所示:

 (3) 我們觀察一下圖片,我們識別圖片上的數(shù)字但也會存在黃框和紅框中的干擾,這時候我們可以想到前面所學到的形態(tài)學操作禮帽,閉運算...

先進行禮帽操作,突出更明亮的區(qū)域:

kernel=np.ones((9,3),np.uint8)
card_tophat=cv2.morphologyEx(card_gray,cv2.MORPH_TOPHAT,kernel)
cv_show('card_tophat',card_tophat)

結(jié)果如圖:

(4)我們進行圖像的輪廓檢測只取外輪廓。在這個圖上有不同的區(qū)域,我們?nèi)绾螀^(qū)分呢,我們可以用h的大小進行估計,這個數(shù)據(jù)根據(jù)項目而定

bankcard_contours, hierarchy = cv2.findContours(card_thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
banck_card_cnts = []
draw_img = card.copy() 
for i, contour in enumerate(bankcard_contours):
    x, y, w, h = cv2.boundingRect(contour)
    # 數(shù)字的x 坐標在 一定的位置范圍
    if 0.5 * card_h < y < 0.6 * card_h: 
        banck_card_cnts.append((x, y, w, h))
        draw_img = cv2.rectangle(draw_img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 255),
                                 thickness=2)  # 畫出這個矩形,會在原圖上畫
cv_show_image('rectangle_contours_img', draw_img)

結(jié)果如圖:

(5)模板匹配,讀出圖像。

for i, locs in enumerate(banck_card_cnts):
 
    x, y, w, h = locs[:]  # 保留了在原始圖像的位置信息
    dst_img = card_thresh[y:y + h, x:x + w]  # 獲得當前圖像的位置和區(qū)域
    dst_img = cv2.resize(dst_img, dsize)
    cv_show('rectangle_contours_img', dst_img)
    tm_vals = {}
    for number, temp_img in dict_template.items():
        # 模板匹配,采用計算相關(guān)性系數(shù),值越大越相關(guān)
        res = cv2.matchTemplate(dst_img, temp_img, cv2.TM_CCOEFF_NORMED)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
        tm_vals[number] = max_val
 
    number_tm = max(tm_vals, key=tm_vals.get)
 
    # 在圖像上畫出結(jié)果來
    draw_img = cv2.rectangle(draw_img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 255),
                             thickness=2)  
    cv2.putText(draw_img, str(number_tm), (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.65,
                color=(0, 0, 255), thickness=2)
 
cv_show_image('final_result', draw_img)

結(jié)果如圖所示: 

 只是展示一部分(倒序輸出)

到此這篇關(guān)于Python+OpenCV實現(xiàn)信用卡數(shù)字識別的方法詳解的文章就介紹到這了,更多相關(guān)Python OpenCV信用卡數(shù)字識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python機器學習算法庫scikit-learn學習之決策樹實現(xiàn)方法詳解

    Python機器學習算法庫scikit-learn學習之決策樹實現(xiàn)方法詳解

    這篇文章主要介紹了Python機器學習算法庫scikit-learn學習之決策樹實現(xiàn)方法,結(jié)合實例形式分析了決策樹算法的原理及使用sklearn庫實現(xiàn)決策樹的相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Python3將ipa包中的文件按大小排序

    Python3將ipa包中的文件按大小排序

    這篇文章主要介紹了Python3將ipa包中的文件按大小排序,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 一文詳解NumPy數(shù)組迭代與合并

    一文詳解NumPy數(shù)組迭代與合并

    NumPy?數(shù)組迭代是訪問和處理數(shù)組元素的重要方法,它允許您逐個或成組地遍歷數(shù)組元素,NumPy?提供了多種函數(shù)來合并數(shù)組,用于將多個數(shù)組的內(nèi)容連接成一個新數(shù)組,本文給大家詳細介紹了NumPy數(shù)組迭代與合并,需要的朋友可以參考下
    2024-05-05
  • Python中類型檢查的詳細介紹

    Python中類型檢查的詳細介紹

    Python是一種非常動態(tài)的語言,函數(shù)定義中完全沒有類型約束。下面這篇文章主要給大家詳細介紹了Python中類型檢查的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Python對Tornado請求與響應(yīng)的數(shù)據(jù)處理

    Python對Tornado請求與響應(yīng)的數(shù)據(jù)處理

    這篇文章主要介紹了Python對Tornado請求與響應(yīng)的數(shù)據(jù)處理,需要的朋友可以參考下
    2020-02-02
  • Python讀取Hive數(shù)據(jù)庫實現(xiàn)代碼詳解

    Python讀取Hive數(shù)據(jù)庫實現(xiàn)代碼詳解

    這篇文章主要介紹了Python讀取Hive數(shù)據(jù)庫實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 如何搜索查找并解決Django相關(guān)的問題

    如何搜索查找并解決Django相關(guān)的問題

    每個程序員都會在開發(fā)過程中遇到這樣或那樣的問題, 有時光靠一個人是無法解決所有問題的, 所以我們應(yīng)該找到適當?shù)牡胤教釂?
    2014-06-06
  • Python操作MySQL簡單實現(xiàn)方法

    Python操作MySQL簡單實現(xiàn)方法

    這篇文章主要介紹了Python操作MySQL簡單實現(xiàn)方法,通過一個簡單的實例講述了Python針對mysql數(shù)據(jù)庫的增刪改查技巧,需要的朋友可以參考下
    2015-01-01
  • 利用python代碼管理Word文檔屬性信息

    利用python代碼管理Word文檔屬性信息

    在Word文檔管理中,文檔屬性包含與文檔有關(guān)的關(guān)鍵信息,如標題、作者、創(chuàng)建日期等,是進行文檔管理的重要工具,本文將展示如何利用Python代碼來靈活操控Word文檔的屬性信息,從而滿足個性化與批量化文檔處理的需求,需要的朋友可以參考下
    2024-05-05
  • 關(guān)于Python時間日期常見的一些操作方法

    關(guān)于Python時間日期常見的一些操作方法

    Python的datetime模塊是處理日期和時間的強大工具,datetime類可以獲取當前時間、指定日期、計算時間差、訪問時間屬性及格式化時間,這些功能使得在Python中進行時間日期處理變得簡單高效,需要的朋友可以參考下
    2024-09-09

最新評論