import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread("G:\\IDLE\\timg.jpg")
img1=img[:,:,::-1]
hsv=cv2.cvtColor(img.copy(),cv2.COLOR_BGR2HSV) #将图像转换成HSV格式
gau= cv2.GaussianBlur(img.copy(),(5,5),9) #进行高斯滤波
lower=np.array([100,50,50]) #蓝色的下限
upper=np.array([140,255,255]) #蓝色的上限
mask=cv2.inRange(hsv,lower,upper) #进行掩膜
res=cv2.bitwise_and(img.copy(),img.copy(),mask=mask)
gray= cv2.cvtColor(res,cv2.COLOR_BGR2GRAY) #转为灰度图像
ret,binary = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) #对灰度图像进行二值化处理
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 1)) #闭操作
closed = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)
contours,hierarchy = cv2.findContours(closed.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #寻找轮廓(只找外围轮廓)
draw_image=cv2.drawContours(img1.copy(),contours,-1,(255,0,0),10) #画出轮廓
for i in range(len(contours)):
x,y,w,h=cv2.boundingRect(contours[i])
ratio=w/h
if ratio>2 and ratio<5.5: #一般车牌的宽高比大于2小于5.5
cv2.rectangle(draw_image,(x,y),(x+w,y+h),(0,255,0),15)
chepai=draw_image[y:y+h,x:x+w] #裁剪图像
plt.subplot(121)
plt.imshow(img1)
plt.title("The original license plate",fontsize=20)
plt.subplot(122)
plt.imshow(chepai)
plt.title("License plate cutting")
#plt.imshow(draw_image)
#plt.title("License plate location",fontsize=20)
plt.show()
结果如下所示: