车牌识别python

直接上代码:

import os
import cv2
import numpy as np


# 显示图片
def cvShow(img):
    cv2.imshow('0', img)
    cv2.waitKey()


Img = cv2.imread("D:\python.code\carRead\car/img.png")#D:\python.code\carRead\car\img3.png
cvShow(Img)

# 高斯去燥
Img1 = cv2.GaussianBlur(Img, (3, 3), 0)
# cvShow(Img1)
# 灰度处理
grayImg = cv2.cvtColor(Img1, cv2.COLOR_BGR2GRAY)
# cvShow(grayImg)

# 边缘检测
# Soble算子边缘检测
Sobel_x = cv2.Sobel(grayImg, cv2.CV_16S, 1, 0)
sImg = cv2.convertScaleAbs(Sobel_x)
# cvShow(sImg)

# 自适应阈值处理
ret, img = cv2.threshold(sImg, 0, 255, cv2.THRESH_OTSU)
# cvShow(img)

# 闭运算
# 先膨胀在腐蚀
kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (14, 3))
# print(kernelX)
image = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernelX, iterations=2)
# cvShow(image)

# 去除小白点
kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (20, 1))
kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 19))
# 膨胀,腐蚀
image = cv2.dilate(image, kernelX)
image = cv2.erode(image, kernelX)
# 腐蚀,膨胀
image = cv2.erode(image, kernelY)
image = cv2.dilate(image, kernelY)
# cvShow(image)

# 中值滤波去除噪点
image = cv2.medianBlur(image, 15)
# cvShow(image)

# 轮廓检测
# cv2 RETR_EXTERNAL 表示只检测外轮廓
# cv2.CHAIN_APPROX_SIMPLE压水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮只需4个点来保存轮席信息
contours, hierarchy = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
Img2 = Img.copy()
cv2.drawContours(Img2, contours, -1, (0, 0, 255), 1)
# cvShow(Img2)

# 筛选车牌位置的轮廓
# 车牌长宽比在3:1到4:1之间

for item in contours:
    # cv2.boundingRect用一个最小的巨型,把形状包起来
    rect = cv2.boundingRect(item)
    x = rect[0]
    y = rect[1]
    weight = rect[2]
    height = rect[3]
    if (weight > (height * 3)) and (weight < (height * 4.5)):
        rectImg = Img[y:y + height, x:x + weight]
        cv2.imwrite('D:\python.code\carRead\license/license_plate.png', rectImg)#\是路径,/是文件名
        # cv

你可能感兴趣的:(python,开发语言)