基于OpenCV实战:车牌检测

2021-05-07 11:07:19 浏览数 (1)

拥有思维导图或流程将引导我们朝着探索和寻找实现目标的正确道路的方向发展。如果要给我一张图片,我们如何找到车牌并提取文字?

一般思维步骤:

  1. 识别输入数据是图像。
  2. 扫描图像以查看由边缘定义的所有不同形状。
  3. 假设车牌是矩形,则在与之前步骤不同的所有形状中,找到与矩形最匹配的形状。
  4. 一旦找到矩形,该形状内的信息即为车牌号。

1、识别输入数据是图像。

为了让Pytho n相应地处理输入数据,我们将导入适当的库。我们将使用OpenCV(cv2)读取图像。另外,我们想使用Imutils将图像大小标准化为512像素(我们选择512像素,因为它是图像大小与图像细节之间的中间点,Imutils库将自动调整其高度以匹配其原始比例)。

阅读图像后,我们将其转换为灰度。转换为灰度不仅可以减少计算复杂性,而且对于查找轮廓(稍后的步骤)也很重要,因为OpenCV可以从黑色背景中的白色连接对象中查找轮廓。

调整大小并转换为灰度后的图像:

2、扫描图像以查看由边缘定义的所有不同形状

当我们查看一个对象时,我们的眼睛会通过其边缘检测到对象的形状,该对象的边缘与其背景,周围或相邻对象有颜色差异。因此,为了使计算机能够勾勒出图像中所有不同的形状,我们需要应用此概念。

这是重要的一步。如果计算机无法勾勒出重要的边缘,则可能无法找到车牌。

我们将OpenCV中的Canny函数应用到预处理后的图像上,以勾勒出其边缘或颜色渐变。

在应用Canny函数之前,我们将首先对图像应用平滑方法以减少噪点。在这里,我们对图像应用了双边滤波方法,以在保持边缘清晰的同时减少噪声。

注意:这2个函数中的参数不是"one-size-fits-all"。需要针对你们的应用程序进行调整。

3.假定车牌是矩形,从与前面步骤不同的所有形状中找出与矩形最匹配的形状

当给人一张带有牌照的图像时,我们的眼睛就能从其他所有形状中找出牌照,因为我们的先验知识告诉我们这是一个矩形的形状,具有四个相连的角。

要将这个想法应用到Python,我们首先将OpenCV findContours函数应用到图4上以查找所有闭合轮廓。然后,为了可视化它们,我们应用了drawContours函数将轮廓绘制到原始图像上。

如图6所示,它具有许多轮廓,其中大多数轮廓形状不正确或没有被认为是矩形的区域。因此,我们将根据其面积对轮廓进行排序,并根据其面积过滤轮廓。最后,我们将再次使用drawContour函数显示过滤后的轮廓。

接下来,找到最适合车牌的形状,即矩形。为此,我们将遍历其余所有轮廓,并应用arcLength和roximatePolyDP函数近似闭合轮廓。找到后,我们将使用boundingRect函数来定位要裁剪的角点。

4.找到矩形后,该形状内的信息将为车牌号。

找到正确的轮廓后,我们需要从该轮廓中提取文本。为此,我们将使用Pytesseract。我们还将需要安装Teseract,并将其与Pytesseract结合使用。

使用“ image_to_string”功能从轮廓提取文本。请注意,“ config”是一个变化的参数,可能需要针对每个应用程序进行更改。

OpenCV和Pytesseract在此项目上是众多方法之一。但是有了路线图,它可以使你们更好地了解要采用的方法,以及需要或者想要的项目有多复杂。

— — 完 — —

0 人点赞