基於OpenCV 的車牌識別
基於OpenCV 的車牌識別
	
資料來源: https://mp.weixin.qq.com/s/plUxIatkBHd2jjnsMy2nmw
	
code:
#@programming_fever 
import  cv2 
import  imutils 
import  numpy  as  np 
import  pytesseract 
pytesseract.pytesseract.tesseract_cmd =  r'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe'
img = cv2.imread( 'D://skoda1 .jpg' ,cv2.IMREAD_COLOR) 
img = cv2.resize(img, ( 600 , 400 ) ) 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
gray = cv2.bilateralFilter(gray,  13 ,  15 ,  15 ) 
edged = cv2.Canny(gray,  30 ,  200 ) 
contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 
contours = imutils.grab_contours(contours) 
contours = sorted(contours, key = cv2.contourArea, reverse =  True )[: 10 ] 
screenCnt =  None 
for  c  in  contours: 
    peri = cv2.arcLength(c,  True ) 
    approx = cv2.approxPolyDP(c,  0.018  * peri,  True ) 
    if  len(approx) ==  4 : 
        screenCnt = approx 
        break 
if  screenCnt  is  None : 
    detected =  0 
    print ( "No contour detected" ) 
else : 
     detected =  1 
if  detected ==  1 : 
    cv2.drawContours(img, [screenCnt],  -1 , ( 0 ,  0 ,  255 ),  3 ) 
mask = np.zeros(gray.shape ,np.uint8) 
new_image = cv2.drawContours(mask,[screenCnt], 0 , 255 , -1 ,) 
new_image = cv2.bitwise_and(img,img,mask=mask) 
(x, y) = np.where(mask ==  255 ) 
(topx, topy) = (np.min(x), np.min(y)) 
(bottomx, bottomy) = (np.max(x), np.max(y))
Cropped = gray[topx:bottomx+ 1 , topy:bottomy+ 1 ] 
text = pytesseract.image_to_string(Cropped, config= '--psm 11' ) 
print( "programming_fever's License Plate Recognition\n" ) 
print( "Detected license plate Number is :" ,text) 
img = cv2.resize(img,( 500 , 300 )) 
Cropped = cv2.resize(Cropped,( 400 , 200 )) 
cv2.imshow( 'car' ,img) 
cv2.imshow( 'Cropped' ,Cropped) 
cv2.waitKey( 0 ) 
cv2.destroyAllWindows()
原文:
	