如何使用OpenCV Python檢測車牌?
我們將使用Haar級聯分類器來檢測影像中的車牌號碼。Haar級聯分類器是一種有效的目標檢測方法,它是一種基於機器學習的方法。
為了訓練車牌分類器,演算法最初需要大量的正樣本影像(車牌影像)和負樣本影像(沒有車牌的影像)。分類器根據這些正樣本和負樣本影像進行訓練,然後用於檢測其他影像中的目標(車牌)。我們可以使用已經訓練好的Haar級聯進行目標檢測。
如何下載Haarcascade?
您可以訪問以下GitHub網站地址找到不同的haarcascades:
https://github.com/opencv/opencv/tree/master/data/haarcascades要下載俄羅斯車牌haarcascade,請點選haarcascade_russian_plate_number.xml檔案。以原始格式開啟,右鍵單擊並儲存。
步驟
為了檢測影像中的車牌號碼,我們可以按照以下步驟:
匯入所需的庫。在以下所有示例中,所需的Python庫是OpenCV。確保您已經安裝它。
使用cv2.imread()讀取輸入影像。指定完整的影像路徑。將影像轉換為灰度影像。
初始化Haarcascade分類器物件plate_cascade = cv2.CascadeClassifier()用於車牌檢測。傳入haar級聯xml檔案的完整路徑。您可以使用haar級聯檔案haarcascade_russian_plate_number.xml來檢測影像中的車牌。
使用plate_cascade.detectMultiScale()檢測輸入影像中的車牌。它以(x,y,w,h)格式返回檢測到的車牌的座標。
使用cv2.rectangle()在原始影像中繪製檢測到的車牌周圍的邊界矩形。
顯示帶有車牌周圍已繪製邊界矩形的影像。
讓我們看一些例子以便更好地理解。
示例
在這個Python程式中,我們使用haarcascade檢測輸入影像中的車牌號碼。
# import required libraries import cv2 import numpy as np # Read input image img = cv2.imread("audi.jpg") # convert input image to grayscale gray = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # read haarcascade for number plate detection cascade = cv2.CascadeClassifier('haarcascades\haarcascade_russian_plate_number.xml') # Detect license number plates plates = cascade.detectMultiScale(gray, 1.2, 5) print('Number of detected license plates:', len(plates)) # loop over all plates for (x,y,w,h) in plates: # draw bounding rectangle around the license number plate cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2) gray_plates = gray[y:y+h, x:x+w] color_plates = img[y:y+h, x:x+w] # save number plate detected cv2.imwrite('Numberplate.jpg', gray_plates) cv2.imshow('Number Plate', gray_plates) cv2.imshow('Number Plate Image', img) cv2.waitKey(0) cv2.destroyAllWindows()
我們將使用此影像作為該程式的輸入檔案:
輸出
執行後,它將生成以下輸出:
Number of detected license plates: 1
我們將得到以下輸出視窗: