如何使用OpenCV Python检测车牌?

如何使用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 cv2
import numpy as np

# 读取输入图像
img = cv2.imread("audi.jpg")

# 将输入图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 读取检测车牌的haarcascade
cascade = cv2.CascadeClassifier('haarcascades\haarcascade_russian_plate_number.xml')

# 检测车牌号码
plates = cascade.detectMultiScale(gray, 1.2, 5)
print('Number of detected license plates:', len(plates))

# 循环遍历所有车牌
for (x,y,w,h) in plates:

   # 在车牌周围绘制边界矩形
   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]

   # 保存检测到的车牌
   cv2.imwrite('Numberplate.jpg', gray_plates)
   cv2.imshow('Number Plate', gray_plates)
   cv2.imshow('Number Plate Image', img)
   cv2.waitKey(0)
cv2.destroyAllWindows()

我们将使用下面这张图像作为 输入文件 进行本程序的运行 −

如何使用OpenCV Python检测车牌?

输出

执行后,将会产生以下 输出

Number of detected license plates: 1

我们得到以下的 输出 窗口−

如何使用OpenCV Python检测车牌?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python OpenCV