如何使用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

我们将得到以下输出窗口:


更新于:2022年12月5日

14K+ 浏览量

开启您的职业生涯

完成课程获得认证

开始学习
广告