OpenCV第七篇:车牌识别

这篇具有很好参考价值的文章主要介绍了OpenCV第七篇:车牌识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.调整图片大小,并获取灰度图

 2.双边滤波去除噪音:cv2.bilateralFilter()。

3.边缘检测:cv2.Canny(image,threshold1,threshold2)

4.寻找轮廓:车牌(四边形)

​编辑 5.图像位运算进行遮罩

6.图像剪裁

7.字符识别:OCR


OpenCV第七篇:车牌识别

1.调整图片大小,并获取灰度图

import cv2

if __name__ == '__main__':
    img = cv2.imread('2.jpeg')
    # 调整图片大小
    img = cv2.resize(img, (620, 480))
    # 灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)




    # 显示效果
    cv2.imshow('original', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

OpenCV第七篇:车牌识别

 2.双边滤波去除噪音:cv2.bilateralFilter()。

import cv2

if __name__ == '__main__':
    img = cv2.imread('2.jpeg')
    # 调整图片大小
    img = cv2.resize(img, (620, 480))
    # 灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 双边滤波
    gray1 = cv2.bilateralFilter(gray, 13, 15, 15)

    # 显示效果
    cv2.imshow('gray', gray)
    cv2.imshow('bilateralFilter', gray1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

OpenCV第七篇:车牌识别

3.边缘检测:cv2.Canny(image,threshold1,threshold2)

仅显示强度梯度大于最小阈值threshold1且小于最大阈值threshold2的边缘。

import cv2

if __name__ == '__main__':
    img = cv2.imread('2.jpeg')
    # 调整图片大小
    img = cv2.resize(img, (620, 480))
    # 灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 双边滤波
    gray = cv2.bilateralFilter(gray, 13, 15, 15)
    # 边缘检测
    edged = cv2.Canny(gray, 30, 200)




    # 显示效果
    cv2.imshow('gray', gray)
    cv2.imshow('edged', edged)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

OpenCV第七篇:车牌识别

4.寻找轮廓:车牌(四边形)

pip install imutils
import cv2
import imutils

if __name__ == '__main__':
    img = cv2.imread('2.jpeg')
    # 调整图片大小
    img = cv2.resize(img, (620, 480))
    # 灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 双边滤波
    gray = cv2.bilateralFilter(gray, 13, 15, 15)
    # 边缘检测
    edged = cv2.Canny(gray, 30, 200)


    # 寻找轮廓(图像矩阵,输出模式,近似方法)
    contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    # 配合上面一句使用:用来兼容cv2和cv3
    contours = imutils.grab_contours(contours)
    # 根据区域大小排序取前十个
    contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]
    screenCnt = None
    # 遍历轮廓,找到车牌轮廓
    for c in contours:
        # 计算轮廓周长(轮廓,是否闭合)
        peri = cv2.arcLength(c, True)
        # 折线化(轮廓,阈值(越小越接近曲线),是否闭合)返回折线顶点坐标
        approx = cv2.approxPolyDP(c, 0.018 * peri, True)
        # 获取四个顶点(即四边形)
        if len(approx) == 4:
            screenCnt = approx
            break
    # 如果找到了四边形
    if screenCnt is not None:
        # 根据四个顶点坐标对img画线(图像矩阵,轮廓坐标集,轮廓索引,颜色,线条粗细)
        cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)



    # 显示效果
    cv2.imshow('img', img)
    cv2.imshow('gray', gray)
    cv2.imshow('edged', edged)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

 5.图像位运算进行遮罩

import cv2
import imutils
import numpy as np

if __name__ == '__main__':
    img = cv2.imread('2.jpeg')
    # 调整图片大小
    img = cv2.resize(img, (620, 480))
    # 灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 双边滤波
    gray = cv2.bilateralFilter(gray, 13, 15, 15)
    # 边缘检测
    edged = cv2.Canny(gray, 30, 200)

    """寻找轮廓(图像矩阵,输出模式,近似方法)"""
    contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    # 配合上面一句使用:用来兼容cv2和cv3
    contours = imutils.grab_contours(contours)
    # 根据区域大小排序取前十个
    contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]
    screenCnt = None
    # 遍历轮廓,找到车牌轮廓
    for c in contours:
        # 计算轮廓周长(轮廓,是否闭合)
        peri = cv2.arcLength(c, True)
        # 折线化(轮廓,阈值(越小越接近曲线),是否闭合)返回折线顶点坐标
        approx = cv2.approxPolyDP(c, 0.018 * peri, True)
        # 获取四个顶点(即四边形)
        if len(approx) == 4:
            screenCnt = approx
            break
    # 如果找到了四边形
    if screenCnt is not None:
        # 根据四个顶点坐标对img画线(图像矩阵,轮廓坐标集,轮廓索引,颜色,线条粗细)
        cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)

    """遮罩"""
    # 创建一个灰度图一样大小的图像矩阵
    mask = np.zeros(gray.shape, np.uint8)
    # 将创建的图像矩阵的车牌区域画成白色
    cv2.drawContours(mask, [screenCnt], 0, 255, -1, )
    # 图像位运算进行遮罩
    new_image = cv2.bitwise_and(img, img, mask=mask)


    # 显示效果
    cv2.imshow('img', img)
    cv2.imshow('gray', gray)
    cv2.imshow('edged', edged)
    cv2.imshow('new_image', new_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

OpenCV第七篇:车牌识别

6.图像剪裁

import cv2
import imutils
import numpy as np

if __name__ == '__main__':
    img = cv2.imread('2.jpeg')
    # 调整图片大小
    img = cv2.resize(img, (620, 480))
    # 灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 双边滤波
    gray = cv2.bilateralFilter(gray, 13, 15, 15)
    # 边缘检测
    edged = cv2.Canny(gray, 30, 200)

    """寻找轮廓(图像矩阵,输出模式,近似方法)"""
    contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    # 配合上面一句使用:用来兼容cv2和cv3
    contours = imutils.grab_contours(contours)
    # 根据区域大小排序取前十个
    contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]
    screenCnt = None
    # 遍历轮廓,找到车牌轮廓
    for c in contours:
        # 计算轮廓周长(轮廓,是否闭合)
        peri = cv2.arcLength(c, True)
        # 折线化(轮廓,阈值(越小越接近曲线),是否闭合)返回折线顶点坐标
        approx = cv2.approxPolyDP(c, 0.018 * peri, True)
        # 获取四个顶点(即四边形)
        if len(approx) == 4:
            screenCnt = approx
            break
    # 如果找到了四边形
    if screenCnt is not None:
        # 根据四个顶点坐标对img画线(图像矩阵,轮廓坐标集,轮廓索引,颜色,线条粗细)
        cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)

    """遮罩"""
    # 创建一个灰度图一样大小的图像矩阵
    mask = np.zeros(gray.shape, np.uint8)
    # 将创建的图像矩阵的车牌区域画成白色
    cv2.drawContours(mask, [screenCnt], 0, 255, -1, )
    # 图像位运算进行遮罩
    new_image = cv2.bitwise_and(img, img, mask=mask)

    """图像剪裁"""
    # 获取车牌区域的所有坐标点
    (x, y) = np.where(mask == 255)
    # 获取底部顶点坐标
    (topx, topy) = (np.min(x), np.min(y))
    # 获取底部坐标
    (bottomx, bottomy,) = (np.max(x), np.max(y))
    # 剪裁
    Cropped = gray[topx:bottomx, topy:bottomy]

    # 显示效果
    cv2.imshow('img', img)
    cv2.imshow('gray', gray)
    cv2.imshow('edged', edged)
    cv2.imshow('Cropped', Cropped)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

OpenCV第七篇:车牌识别

7.字符识别:OCR

import cv2
import imutils
import numpy as np

if __name__ == '__main__':
    img = cv2.imread('2.jpeg')
    # 调整图片大小
    img = cv2.resize(img, (620, 480))
    # 灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 双边滤波
    gray = cv2.bilateralFilter(gray, 13, 15, 15)
    # 边缘检测
    edged = cv2.Canny(gray, 30, 200)

    """寻找轮廓(图像矩阵,输出模式,近似方法)"""
    contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    # 配合上面一句使用:用来兼容cv2和cv3
    contours = imutils.grab_contours(contours)
    # 根据区域大小排序取前十个
    contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]
    screenCnt = None
    # 遍历轮廓,找到车牌轮廓
    for c in contours:
        # 计算轮廓周长(轮廓,是否闭合)
        peri = cv2.arcLength(c, True)
        # 折线化(轮廓,阈值(越小越接近曲线),是否闭合)返回折线顶点坐标
        approx = cv2.approxPolyDP(c, 0.018 * peri, True)
        # 获取四个顶点(即四边形)
        if len(approx) == 4:
            screenCnt = approx
            break
    # 如果找到了四边形
    if screenCnt is not None:
        # 根据四个顶点坐标对img画线(图像矩阵,轮廓坐标集,轮廓索引,颜色,线条粗细)
        cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)

    """遮罩"""
    # 创建一个灰度图一样大小的图像矩阵
    mask = np.zeros(gray.shape, np.uint8)
    # 将创建的图像矩阵的车牌区域画成白色
    cv2.drawContours(mask, [screenCnt], 0, 255, -1, )
    # 图像位运算进行遮罩
    new_image = cv2.bitwise_and(img, img, mask=mask)

    """图像剪裁"""
    # 获取车牌区域的所有坐标点
    (x, y) = np.where(mask == 255)
    # 获取底部顶点坐标
    (topx, topy) = (np.min(x), np.min(y))
    # 获取底部坐标
    (bottomx, bottomy,) = (np.max(x), np.max(y))
    # 剪裁
    Cropped = gray[topx:bottomx, topy:bottomy]

    """OCR识别"""
    text = pytesseract.image_to_string(Cropped, config='--psm 11')
    print("车牌结果:", text)

    # 显示效果
    cv2.imshow('img', img)
    cv2.imshow('gray', gray)
    cv2.imshow('edged', edged)
    cv2.imshow('new_image', Cropped)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

OpenCV第七篇:车牌识别  文章来源地址https://www.toymoban.com/news/detail-456877.html

到了这里,关于OpenCV第七篇:车牌识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv-车牌识别

    ​ 最近研究了几天车牌识别的项目,现在记录一下学习的过程,基于OpenCV编写Python代码来完成这一任务。 ​ 文章末尾有源码,有兴趣的读者可以用jupyter notebook一步一步看执行过程和结果。 本项目车牌识别的步骤为: 加载图片 高斯去噪 灰度转换 边缘检测 闭运算,腐蚀膨胀

    2024年02月05日
    浏览(25)
  • 基于OpenCV 的车牌识别

    车牌识别是一种图像处理技术,用于识别不同车辆。这项技术被广泛用于各种安全检测中。现在让我一起基于 OpenCV 编写 Python 代码来完成这一任务。 车牌识别的相关步骤 1. 车牌检测:第一步是从汽车上检测车牌所在位置。我们将使用 OpenCV 中矩形的轮廓检测来寻找车牌。如

    2024年02月09日
    浏览(34)
  • Opencv识别车牌

    #encoding:utf8 import cv2 import numpy as np Min_Area = 50 #定位车牌 def color_position(img,output_path): colors = [#([26,43,46], [34,255,255]), # 黄色 ([100,43,46], [124,255,255]), # 蓝色 ([35, 43, 46], [77, 255, 255]) # 绿色 ] hsv =cv2.cvtColor(img, cv2.COLOR_BGR2HSV) for (lower, upper) in colors: lower = np.array(lower, dtype=“uint8”) # 颜色

    2023年04月26日
    浏览(24)
  • 车牌识别系统 opencv

             两个关键子系统: 车牌定位 和 字符识别 原始车辆图像采集 汽车牌照区域定位 汽车牌照内字符的分割 汽车牌照内字符的识别 车牌定位方法: 基于边缘检测的车牌定位方法 基于遗传算法的车牌定位方法 基于纹理特征的车牌定位方法 基于数学形态学的车牌定位

    2024年02月21日
    浏览(24)
  • OpenCV入门(C++/Python)- 使用OpenCV调整尺寸大小(三)

    使用OpenCV调整图像大小。要调整图像的大小,可以根据每个轴(高度和宽度)进行缩放,考虑指定的缩放因素,或者只需设置所需的高度和宽度。 调整图像大小时: 如果想在调整后的图像中保持相同的宽高比,请务必记住图像的原始宽高比(即宽度和高度)。 缩小图像的大

    2024年02月07日
    浏览(32)
  • python图像处理——图像压缩(调整图片的存储大小)

    前言 很多时候拍的图片都是几百KB 甚至多少M来算的,有时候证件照要求的又很小,作为一个程序员,总不能老是在网上找压缩的吧,而且又麻烦,不如自己用程序跑跑啦 懒得写太详细注释了,不懂可以问噢,后续会把不懂的放上来,或者优化代码 点赞或收藏可以鼓励作者加

    2024年03月11日
    浏览(49)
  • opencv机器学习车牌识别系统

    文章目录 0 前言+ 1 课题介绍+ 1.1 系统简介+ 1.2 系统要求+ 1.3 系统架构 2 实现方式+ 2.1 车牌检测技术+ 2.2 车牌识别技术+ 2.3 SVM识别字符+ 2.4 最终效果 3 最后 这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专

    2024年02月05日
    浏览(32)
  • 用python批量合并word文件并统一调整图片大小

    注:setpicsize宏文件先要放如word中的视图-宏中,宏文件代码如下 Sub setpicsize() Dim n On Error Resume Next For n = 1 To ActiveDocument.InlineShapes.Count ActiveDocument.InlineShapes(n).Height = 27.31 * 20 ActiveDocument.InlineShapes(n).Width = 19.33 * 20 Next n End Sub  

    2024年02月02日
    浏览(34)
  • OpenCV实例(八)车牌字符识别技术(三)汉字识别

    相较于数字和英文字符的识别,汽车牌照中的汉字字符识别的难度更大,主要原因有以下4个方面: (1)字符笔画因切分误差导致非笔画或笔画流失。 (2)汽车牌照被污染导致字符上出现污垢。 (3)采集所得车辆图像分辨率低导致多笔画的汉字较难分辨。 (4)车辆图像采集时所受光

    2024年02月12日
    浏览(22)
  • OpenCV实例(八)车牌字符识别技术(二)字符识别

    匹配判别是字符识别的基本思想,与其他模式识别的应用非常类似。字符识别的基本原理就是对字符图像进行预处理、模式表达、判别和字典学习。 字符识别一般可分为三个阶段: 第一阶段为初级阶段,主要是应用一维图像的处理方法实现对二维图像的识别。此阶段主要涉

    2024年02月13日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包