国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenCV實(shí)例(八)車牌字符識別技術(shù)(二)字符識別

這篇具有很好參考價值的文章主要介紹了OpenCV實(shí)例(八)車牌字符識別技術(shù)(二)字符識別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1.字符識別原理及其發(fā)展階段

匹配判別是字符識別的基本思想,與其他模式識別的應(yīng)用非常類似。字符識別的基本原理就是對字符圖像進(jìn)行預(yù)處理、模式表達(dá)、判別和字典學(xué)習(xí)。

字符識別一般可分為三個階段:

第一階段為初級階段,主要是應(yīng)用一維圖像的處理方法實(shí)現(xiàn)對二維圖像的識別。此階段主要涉及相關(guān)函數(shù)的構(gòu)造以及特征向量的抽取。目前,該階段的字符識別方法仍然在匹配方法的龐大家族中扮演著很重要的角色。

第二階段為對基礎(chǔ)理論進(jìn)行相關(guān)研究的階段。細(xì)化思想、鏈碼法以及對一些離散圖形上的拓?fù)湫匝芯吭谶@一階段進(jìn)行,其中細(xì)化思想主要用于結(jié)構(gòu)的分析,鏈碼法主要用于邊界的表示。本階段實(shí)現(xiàn)了抽取大范圍的孔、凹凸區(qū)域、連通性以及抽取局部特征等算法,同時還實(shí)現(xiàn)了對K-L展開法“特征抽取理論”作為核心相關(guān)工作的研究。

第三階段為發(fā)展階段。本階段在依據(jù)實(shí)際系統(tǒng)的要求以及設(shè)備難以提供的條件的基礎(chǔ)上提出更為復(fù)雜的技術(shù),主要研究工作是將技術(shù)與實(shí)際結(jié)合起來。另外,在以構(gòu)造解析法以及相關(guān)法為主的基礎(chǔ)上,許多各具特色且不同類的實(shí)用系統(tǒng)得以研究出來。
OpenCV實(shí)例(八)車牌字符識別技術(shù)(二)字符識別,OpenCV,opencv,人工智能,計算機(jī)視覺

2.字符識別方法

目前字符識別方法主要有基于神經(jīng)網(wǎng)絡(luò)的識別方法、基于特征分析的匹配方法和基于模板的匹配方法。

(1)基于神經(jīng)網(wǎng)絡(luò)的識別方法

基于神經(jīng)網(wǎng)絡(luò)的識別方法主要包括4個步驟:預(yù)處理樣本字符、提取字符的特征、對神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練、神經(jīng)網(wǎng)絡(luò)接受經(jīng)過相關(guān)預(yù)處理和特征提取的字符并對這些字符進(jìn)行識別。

(2)基于特征分析的匹配方法

基于特征分析的匹配方法,主要利用特征平面來進(jìn)行字符匹配。與其他匹配方法進(jìn)行比較可知,它不但對噪聲具有不明顯的反應(yīng),而且可以獲得效果更好的字符特征。

(3)基于模板的匹配方法

基于模板的匹配方法也是字符識別的一種方法,主要權(quán)衡輸入模式與標(biāo)準(zhǔn)模式之間的相似程度。因此,從結(jié)果來看,輸入模式的類別其實(shí)也是標(biāo)準(zhǔn)模式,單從與輸入模式相似度的程度來講,這里提到的標(biāo)準(zhǔn)模式最高。對于離散輸入模式分類的實(shí)現(xiàn),此方法所起的作用非常明顯也非常奏效。

組成汽車牌照的字符大約有50個漢字、20多個英文字符和10個阿拉伯?dāng)?shù)字,相對而言,字符數(shù)比較少,所以可以使用模板匹配法識別這些字符。其中,用于匹配的模板的標(biāo)準(zhǔn)形式可由前面所述的字符制作而成。與其他的字符識別的方法進(jìn)行比較可知,模板匹配法具有相對來說較為簡單的識別過程和較快的字符識別速度,只不過準(zhǔn)確率不是很高。
OpenCV實(shí)例(八)車牌字符識別技術(shù)(二)字符識別,OpenCV,opencv,人工智能,計算機(jī)視覺

3.英文、數(shù)字識別

目前,小波識別法、模板匹配法與神經(jīng)網(wǎng)絡(luò)法等常被作為汽車牌照字符識別的主要方法。數(shù)字字符是在汽車牌照的字符集中具有最小規(guī)模、最簡單結(jié)構(gòu)的子集。雖然字母字符相對于數(shù)字字符而言并不復(fù)雜,但是單從字符的結(jié)構(gòu)上來講,不難看出車牌字符集中的數(shù)字字符要相對簡單一些。一般采用模板匹配法來識別字母字符以及數(shù)字字符,只是有時采用模板匹配法不一定能取得理想的識別效果,例如字符存在劃傷破損、褪色、污跡等問題時。本章采用的匹配模式為兩級模板匹配,首先通過一級模板實(shí)現(xiàn)對字母數(shù)字字符的匹配,然后基于邊緣霍斯多夫距離對一級模板匹配不成功的字符進(jìn)行匹配。

真實(shí)的汽車圖像的采集主要通過CCD工業(yè)相機(jī)進(jìn)行的,輸入的汽車牌照的字符圖像在經(jīng)過汽車牌照的定位以及汽車牌照內(nèi)字符的分割之后形成,其中約有50%的高質(zhì)量的字符包含在3000個字符組成的字符集中,剩下的汽車牌照內(nèi)的字符質(zhì)量都有一定程度的降低。相較于傳統(tǒng)的模板匹配法和基于細(xì)化圖像霍斯多夫距離的模板匹配法,準(zhǔn)確率在基于邊緣霍斯多夫距離的模板匹配識別方法中表現(xiàn)得更高(為98%,字符的錯誤識別率只有2%)。

4.車牌定位實(shí)例

測試照片:
OpenCV實(shí)例(八)車牌字符識別技術(shù)(二)字符識別,OpenCV,opencv,人工智能,計算機(jī)視覺

代碼實(shí)例:

# -*- coding: utf-8 -*-
 
import cv2
import numpy as np


def stretch(img):
    '''
    圖像拉伸函數(shù)
    '''
    maxi=float(img.max())
    mini=float(img.min())
    
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            img[i,j]=(255/(maxi-mini)*img[i,j]-(255*mini)/(maxi-mini))
    
    return img

def dobinaryzation(img):
    '''
    二值化處理函數(shù)
    '''
    maxi=float(img.max())
    mini=float(img.min())
    
    x=maxi-((maxi-mini)/2)
    #二值化,返回閾值ret  和  二值化操作后的圖像thresh
    ret,thresh=cv2.threshold(img,x,255,cv2.THRESH_BINARY)
    #返回二值化后的黑白圖像
    return thresh

def find_rectangle(contour):
    '''
    尋找矩形輪廓
    '''
    y,x=[],[]
    
    for p in contour:
        y.append(p[0][0])
        x.append(p[0][1])
    
    return [min(y),min(x),max(y),max(x)]

def locate_license(img,afterimg):
    '''
    定位車牌號
    '''
    contours,hierarchy=cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    
    #找出最大的三個區(qū)域
    block=[]
    for c in contours:
        #找出輪廓的左上點(diǎn)和右下點(diǎn),由此計算它的面積和長度比
        r=find_rectangle(c)
        a=(r[2]-r[0])*(r[3]-r[1])   #面積
        s=(r[2]-r[0])*(r[3]-r[1])   #長度比
        
        block.append([r,a,s])
    #選出面積最大的3個區(qū)域
    block=sorted(block,key=lambda b: b[1])[-3:]
    
    #使用顏色識別判斷找出最像車牌的區(qū)域
    maxweight,maxindex=0,-1
    for i in range(len(block)):
        b=afterimg[block[i][0][1]:block[i][0][3],block[i][0][0]:block[i][0][2]]
        #BGR轉(zhuǎn)HSV
        hsv=cv2.cvtColor(b,cv2.COLOR_BGR2HSV)
        #藍(lán)色車牌的范圍
        lower=np.array([100,50,50])
        upper=np.array([140,255,255])
        #根據(jù)閾值構(gòu)建掩膜
        mask=cv2.inRange(hsv,lower,upper)
        #統(tǒng)計權(quán)值
        w1=0
        for m in mask:
            w1+=m/255
        
        w2=0
        for n in w1:
            w2+=n
            
        #選出最大權(quán)值的區(qū)域
        if w2>maxweight:
            maxindex=i
            maxweight=w2
            
    return block[maxindex][0]

def find_license(img):
    '''
    預(yù)處理函數(shù)
    '''
    m=400*img.shape[0]/img.shape[1]
    
    #壓縮圖像
    img=cv2.resize(img,(400,int(m)),interpolation=cv2.INTER_CUBIC)
    
    #BGR轉(zhuǎn)換為灰度圖像
    gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    #灰度拉伸
    stretchedimg=stretch(gray_img)
    
    '''進(jìn)行開運(yùn)算,用來去除噪聲'''
    r=16
    h=w=r*2+1
    kernel=np.zeros((h,w),np.uint8)
    cv2.circle(kernel,(r,r),r,1,-1)
    #開運(yùn)算
    openingimg=cv2.morphologyEx(stretchedimg,cv2.MORPH_OPEN,kernel)
    #獲取差分圖,兩幅圖像做差  cv2.absdiff('圖像1','圖像2')
    strtimg=cv2.absdiff(stretchedimg,openingimg)
    
    #圖像二值化
    binaryimg=dobinaryzation(strtimg)
    
    #canny邊緣檢測
    canny=cv2.Canny(binaryimg,binaryimg.shape[0],binaryimg.shape[1])
    
    '''消除小的區(qū)域,保留大塊的區(qū)域,從而定位車牌'''
    #進(jìn)行閉運(yùn)算
    kernel=np.ones((5,19),np.uint8)
    closingimg=cv2.morphologyEx(canny,cv2.MORPH_CLOSE,kernel)
    
    #進(jìn)行開運(yùn)算
    openingimg=cv2.morphologyEx(closingimg,cv2.MORPH_OPEN,kernel)
    
    #再次進(jìn)行開運(yùn)算
    kernel=np.ones((11,5),np.uint8)
    openingimg=cv2.morphologyEx(openingimg,cv2.MORPH_OPEN,kernel)
    
    #消除小區(qū)域,定位車牌位置
    rect=locate_license(openingimg,img)
    
    return rect,img

def cut_license(afterimg,rect):
    '''
    圖像分割函數(shù)
    '''
    #轉(zhuǎn)換為寬度和高度
    rect[2]=rect[2]-rect[0]
    rect[3]=rect[3]-rect[1]
    rect_copy=tuple(rect.copy())
    rect=[0,0,0,0]
    #創(chuàng)建掩膜
    mask=np.zeros(afterimg.shape[:2],np.uint8)
    #創(chuàng)建背景模型  大小只能為13*5,行數(shù)只能為1,單通道浮點(diǎn)型
    bgdModel=np.zeros((1,65),np.float64)
    #創(chuàng)建前景模型
    fgdModel=np.zeros((1,65),np.float64)
    #分割圖像
    cv2.grabCut(afterimg,mask,rect_copy,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)
    mask2=np.where((mask==2)|(mask==0),0,1).astype('uint8')
    img_show=afterimg*mask2[:,:,np.newaxis]
    
    return img_show

def deal_license(licenseimg):
    '''
    車牌圖片二值化
    '''
    #車牌變?yōu)榛叶葓D像
    gray_img=cv2.cvtColor(licenseimg,cv2.COLOR_BGR2GRAY)
    
    #均值濾波  去除噪聲
    kernel=np.ones((3,3),np.float32)/9
    gray_img=cv2.filter2D(gray_img,-1,kernel)
    
    #二值化處理
    ret,thresh=cv2.threshold(gray_img,120,255,cv2.THRESH_BINARY)
    
    return thresh


def find_end(start,arg,black,white,width,black_max,white_max):
    end=start+1
    for m in range(start+1,width-1):
        if (black[m] if arg else white[m])>(0.98*black_max if arg else 0.98*white_max):
            end=m
            break
    return end
                

if __name__=='__main__':
    img=cv2.imread('car.jpg',cv2.IMREAD_COLOR)
    #預(yù)處理圖像
    rect,afterimg=find_license(img)
    
    #框出車牌號
    cv2.rectangle(afterimg,(rect[0],rect[1]),(rect[2],rect[3]),(0,255,0),2)
    cv2.imshow('afterimg',afterimg)
    
    #分割車牌與背景
    cutimg=cut_license(afterimg,rect)
    cv2.imshow('cutimg',cutimg)
    
    #二值化生成黑白圖
    thresh=deal_license(cutimg)
    cv2.imshow('thresh',thresh)
    cv2.imwrite("cp.jpg",thresh)
    cv2.waitKey(0)
    
    #分割字符
    '''
    判斷底色和字色
    '''
    #記錄黑白像素總和
    white=[]
    black=[]
    height=thresh.shape[0]  #263
    width=thresh.shape[1]   #400
    #print('height',height)
    #print('width',width)
    white_max=0
    black_max=0
    #計算每一列的黑白像素總和
    for i in range(width):
        line_white=0
        line_black=0
        for j in range(height):
            if thresh[j][i]==255:
                line_white+=1
            if thresh[j][i]==0:
                line_black+=1
        white_max=max(white_max,line_white)
        black_max=max(black_max,line_black)
        white.append(line_white)
        black.append(line_black)
        print('white',white)
        print('black',black)
    #arg為true表示黑底白字,F(xiàn)alse為白底黑字
    arg=True
    if black_max<white_max:
        arg=False
    
    n=1
    start=1
    end=2
    while n<width-2:
        n+=1
        #判斷是白底黑字還是黑底白字  0.05參數(shù)對應(yīng)上面的0.95 可作調(diào)整
        if(white[n] if arg else black[n])>(0.02*white_max if arg else 0.02*black_max):
            start=n
            end=find_end(start,arg,black,white,width,black_max,white_max)
            n=end
            if end-start>5:
                cj=thresh[1:height,start:end]
                cv2.imshow('cutlicense',cj)
                cv2.waitKey(0)
    
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()

輸出結(jié)果:

OpenCV實(shí)例(八)車牌字符識別技術(shù)(二)字符識別,OpenCV,opencv,人工智能,計算機(jī)視覺文章來源地址http://www.zghlxwxcb.cn/news/detail-642914.html

到了這里,關(guān)于OpenCV實(shí)例(八)車牌字符識別技術(shù)(二)字符識別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于OpenCV 的車牌識別

    基于OpenCV 的車牌識別

    車牌識別是一種圖像處理技術(shù),用于識別不同車輛。這項(xiàng)技術(shù)被廣泛用于各種安全檢測中。現(xiàn)在讓我一起基于 OpenCV 編寫 Python 代碼來完成這一任務(wù)。 車牌識別的相關(guān)步驟 1. 車牌檢測:第一步是從汽車上檢測車牌所在位置。我們將使用 OpenCV 中矩形的輪廓檢測來尋找車牌。如

    2024年02月09日
    瀏覽(23)
  • opencv-車牌識別

    opencv-車牌識別

    ? 最近研究了幾天車牌識別的項(xiàng)目,現(xiàn)在記錄一下學(xué)習(xí)的過程,基于OpenCV編寫Python代碼來完成這一任務(wù)。 ? 文章末尾有源碼,有興趣的讀者可以用jupyter notebook一步一步看執(zhí)行過程和結(jié)果。 本項(xiàng)目車牌識別的步驟為: 加載圖片 高斯去噪 灰度轉(zhuǎn)換 邊緣檢測 閉運(yùn)算,腐蝕膨脹

    2024年02月05日
    瀏覽(19)
  • Opencv識別車牌

    Opencv識別車牌

    #encoding:utf8 import cv2 import numpy as np Min_Area = 50 #定位車牌 def color_position(img,output_path): colors = [#([26,43,46], [34,255,255]), # 黃色 ([100,43,46], [124,255,255]), # 藍(lán)色 ([35, 43, 46], [77, 255, 255]) # 綠色 ] hsv =cv2.cvtColor(img, cv2.COLOR_BGR2HSV) for (lower, upper) in colors: lower = np.array(lower, dtype=“uint8”) # 顏色

    2023年04月26日
    瀏覽(23)
  • OpenCV第七篇:車牌識別

    OpenCV第七篇:車牌識別

    目錄 1.調(diào)整圖片大小,并獲取灰度圖 ?2.雙邊濾波去除噪音:cv2.bilateralFilter()。 3.邊緣檢測:cv2.Canny(image,threshold1,threshold2) 4.尋找輪廓:車牌(四邊形) ?編輯?5.圖像位運(yùn)算進(jìn)行遮罩 6.圖像剪裁 7.字符識別:OCR 1.調(diào)整圖片大小,并獲取灰度圖 ?2.雙邊濾波去除噪音:cv

    2024年02月06日
    瀏覽(25)
  • OpenCV(項(xiàng)目)車牌識別1 -- 車牌提?。ㄐ螒B(tài)學(xué))

    OpenCV(項(xiàng)目)車牌識別1 -- 車牌提?。ㄐ螒B(tài)學(xué))

    目錄 一、形態(tài)學(xué)車牌提?。ê唵危簡吻榫埃??1、讀取圖片,轉(zhuǎn)灰度圖 ?2、提取輪廓(Sobel算子提取y方向邊緣) 3、自適應(yīng)二值化 4、閉運(yùn)算處理,把圖像閉合、揉團(tuán),使圖像區(qū)域化 5、腐蝕/膨脹去噪得到車牌區(qū)域 5-1、橫向腐蝕、膨脹 5-2、縱向腐蝕、膨脹 6、獲取外輪廓 6-1、

    2024年02月08日
    瀏覽(21)
  • opencv機(jī)器學(xué)習(xí)車牌識別系統(tǒng)

    opencv機(jī)器學(xué)習(xí)車牌識別系統(tǒng)

    文章目錄 0 前言+ 1 課題介紹+ 1.1 系統(tǒng)簡介+ 1.2 系統(tǒng)要求+ 1.3 系統(tǒng)架構(gòu) 2 實(shí)現(xiàn)方式+ 2.1 車牌檢測技術(shù)+ 2.2 車牌識別技術(shù)+ 2.3 SVM識別字符+ 2.4 最終效果 3 最后 這兩年開始,各個學(xué)校對畢設(shè)的要求越來越高,難度也越來越大… 畢業(yè)設(shè)計耗費(fèi)時間,耗費(fèi)精力,甚至有些題目即使是專

    2024年02月05日
    瀏覽(47)
  • OpenCV實(shí)戰(zhàn)5 車牌號識別

    OpenCV實(shí)戰(zhàn)5 車牌號識別

    原文在這里,參考這個進(jìn)行了改進(jìn) 感覺學(xué)到了很多東西,便在這里作下筆記。 效果: 目錄 一、知識點(diǎn)學(xué)習(xí): 1. fstream 2. 形態(tài)學(xué)開操作與形態(tài)閉操作 2.1 第一個角度:消除較小的聯(lián)通區(qū)域 vs 彌合較小的聯(lián)通區(qū)域 2.2 第二個角度:消除背景噪音 vs 消除前景噪音 3、approPolyDp函數(shù)

    2024年02月01日
    瀏覽(20)
  • 車牌識別 opencv python(簡單版)

    車牌識別 opencv python(簡單版)

    實(shí)驗(yàn)?zāi)繕?biāo) 使用形態(tài)學(xué)處理,識別圖片中車牌的位置,并識別每個字符的位置 實(shí)驗(yàn)原理 1.車牌識別: (1)車牌的背景色是 藍(lán)色 ,所以先提取圖中藍(lán)色的部分,轉(zhuǎn)化為二值圖像(藍(lán)色部分為1,其余為0)。 (2)再檢測 邊緣 ,標(biāo)出邊緣的外接矩形,根據(jù)此矩形的 長寬比 和面積,就

    2024年02月06日
    瀏覽(20)
  • OpenCV完結(jié)篇——計算機(jī)視覺(人臉識別 || 車牌識別)

    OpenCV完結(jié)篇——計算機(jī)視覺(人臉識別 || 車牌識別)

    scaleFactor調(diào)整哈爾級聯(lián)器的人臉選框使其能框住人臉 官方教程指路 每個特征都是通過從黑色矩形下的像素總和減去白色矩形下的像素總和獲得的單個值 級聯(lián)器模型文件位置 識別嘴就會不精確了 識別鼻子 只要不測口,還是比較準(zhǔn)確的 測口準(zhǔn)確度太低?。?! 安裝很簡單,這里

    2024年02月19日
    瀏覽(27)
  • 計算機(jī)視覺:使用opencv實(shí)現(xiàn)車牌識別

    計算機(jī)視覺:使用opencv實(shí)現(xiàn)車牌識別

    汽車車牌識別(License Plate Recognition)是一個日常生活中的普遍應(yīng)用,特別是在智能交通系統(tǒng)中,汽車牌照識別發(fā)揮了巨大的作用。汽車牌照的自動識別技術(shù)是把處理圖像的方法與計算機(jī)的軟件技術(shù)相連接在一起,以準(zhǔn)確識別出車牌牌照的字符為目的,將識別出的數(shù)據(jù)傳送至交

    2024年02月04日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包