如何使用OpenCV Python检测车牌
我们将使用Haar级联分类器来检测图像中的车牌号。Haar级联分类器是一种有效的对象检测方法,它是一种基于机器学习的方法。
要训练一个车牌分类器,算法最初需要大量的正样本图像(带有车牌的图像)和负样本图像(不带车牌的图像)。分类器是通过这些正样本和负样本图像进行训练的。然后用它来检测其他图像中的对象(车牌)。我们可以使用已经训练好的Haar级联来进行对象检测。
如何下载Haarcascade
您可以在GitHub网站上找到不同的Haarcascade,网址为-
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
我们得到以下 输出 窗口 –