在車牌識別以及別的需要文字識別的場景中都需要對影象中的文字進行正確的切分以便於下一步的識別,類似人的閱讀計算機在識別文字時只能乙個乙個的來,精準的切分字元是識別的必要條件。
假設我們已經從包含整輛車的中得到了只包含車牌的區域,如圖一所示,那麼任務就是如何把圖一**現的字母和數字單獨分開。
注意到圖一的左上角有干擾項,所以在後續處理時要做相應的去噪處理,這個在下面會講。
很顯然如果我們可以找到每乙個字元最小外接矩形那麼就可以精準的從圖一中把每乙個字元拿出來單獨識別。要實現這一步是很簡單的,cv中已經內嵌了所有我們需要的函式,只要呼叫就行。
演算法的大概過程如下:
step1:變換圖一的顏色空間,rgb2gray,為了能夠使用cv的其他重要函式
step2:對step1的影象進行二值化處理
step3:在step2 結果圖中利用findcontours()函式檢測連通區域的輪廓
step4:針對step3 到的輪廓檢測其最小外接矩形,boundingrect()函式。
step5:根據step4 的矩形完成分割。
附上**:
import cv2
import argparse
ap=argparse.argumentparser()
ap.add_argument("-i","--images",required=true,help="path to the images to be classified")
args=vars(ap.parse_args())
def segmentecharacter():
img = cv2.imread(args['images'])
gray = cv2.cvtcolor(img, cv2.color_bgr2gray)
gray = cv2.gaussianblur(gray,(5,5),0)
ret, im_th = cv2.threshold(gray,90,255,cv2.thresh_binary+cv2.thresh_otsu)
im_th = cv2.adaptivethreshold(gray, 255, cv2.adaptive_thresh_mean_c, cv2.thresh_binary,75, 10)
im_th = cv2.bitwise_not(im_th)
sorted_ctrs = sorted(ctrs, key = lambda ctr: cv2.boundingrect(ctr)[0])
#cv2.drawcontours(gray,ctrs,-1,(0,255,0),3)
print len(ctrs)
cv2.imshow('bitwise',im_th)
cv2.waitkey(0)
for i, ctr in enumerate(sorted_ctrs):
x,y,w,h = cv2.boundingrect(ctr)
aspectratio = w/float(h)
heightratio = h/float(im_th.shape[0])
keephight = heightratio > 0.4 and heightratio < 0.95
keepaspectratio = aspectratio < 1.0 and aspectratio > 0.15
#roi = im2[y:y+h,x:x+w]
#cv2.imshow('character'+str(i),roi)
if keepaspectratio and keephight:
roi = im2[y:y+h,x:x+w]
cv2.imshow('character'+str(i),roi)
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
cv2.waitkey(0)
cv2.destroyallwindows()
cv2.imshow('marked areas',img)
cv2.waitkey(0)
if __name__ == '__main__':
segmentecharacter()
基於Python和Opencv的目標檢測與特徵
而我們訓練分類器的過程就是給這個分類函式 數學模型 找到一系列最優的引數,使得通過這個函式來判斷時能達到最好的分類效果 更高階一點的分類器就加入了學習和自適應的概念使得分類更精準 那麼通過什麼可以得到這個分類器呢?就是分類演算法 提到演算法我們不得不提到機器學習的概念,機器學習演算法簡單來說可以通過...
基於python的opencv教程
第一次寫部落格,學習是要有輸入與輸出的,所謂教學相長。所以我想試著自己寫乙份教程,算是對自己的學習總結吧,部落格的排版比較直男,請湊合看吧。首先建議的ide是pycharm,opencv的庫直接pip安裝就好,最好大家有一定的python基礎。第一部分是關於圖象讀取和儲存。import cv2imp...
基於python的opencv學習
dst cv2.sobel src,ddept,dx,dy,ksize ddepth 影象的深度,一般設為 1ksize sobel運算元的大小 白到黑是正數,黑到白是負數,所有的負數都會被截斷為0,因此要使用convertscaleabs取絕對值2 拉普拉斯金字塔 1 低通濾波 2 縮小尺寸pyr...