python+opencv+TESSERT-OCR实现车牌的检测与识别
开学花了十天时间0基础搞出来的,分享给大家,如果有什么错误希望大家给我指正。python师从小甲鱼,opencv师从贾志刚,B站都有视频,也参考了论坛上很多大佬的博客。话不多说,先上运行结果。
当然,这只是一个简易的识别或者说算不上一个车牌识别的系统,因为你可能换一张图片它就识别不出来,但是其中对图像处理的方法还是有通用性的。
1.配置环境
我们需要用到的包如下
import cv2 as cv
import numpy as np
import pytesseract as tess
from PIL import Image
2.打开图片
打开图片并压缩大小,图像不宜太大
src = cv.imread("D:/opencv/image/license.png") # 打开要识别的照片,不能有中文路径
print(src.shape)#输出粗一下原图的大小
license = cv.resize(src, (800, int(800 * src.shape[0] / src.shape[1])))#压缩一下图片,保持了原图的宽高的比例
print(license.shape)#输出一下压缩过后的大小
cv.namedWindow('inputImage', 0)#第二个参数为0,可以改变窗口的大小
我们来看一下结果
第一行为原图的大小,第二行为压缩过后的大小,参数的含义为宽,高,三通道
3.图像处理
图像处理的目的是为了能够找出车牌所在的区域。人一眼就能在这张图片中找出车牌的位置,但计算机不行,图片在计算机眼里只是一个个数字。我的思路如下:色彩空间转换——提取蓝色区域——高斯模糊——转为灰度图片——二值化——开闭操作。这一块有很多种方法,步骤也不相同。
def license_prepation(image):
image_hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV) # 从RGB图像转为hsv色彩空间
low_hsv = np.array([108, 43, 46]) # 设置颜色
high_hsv = np.array([124