注:这是一个非常简单的车牌识别demo
import cv2
import numpy as np
image = cv2.imread(r'D:\car1.png')
hsv_img = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([110, 100, 150])
upper = np.array([125, 200, 255])
mask = cv2.inRange(hsv_img, lowerb=lower, upperb=upper)
kernel = np.ones((5,5), np.uint8)
mask = cv2.dilate(mask, kernel, iterations=10)
contours, hier = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
x, y, w, h = cv2.boundingRect(c)
if w < 2*h:
continue
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow("image", image)
cv2.waitKey(0)
HSV模型和RGB模型一样是用来表示表示颜色空间的,其中:
根据经验,蓝色车牌的HSV范围空间在[110, 100, 150]到[125, 200, 255]这一范围内。
基于上面的经验结论我们可以直接利用opencv中的inRange方法对图像进行mask处理:
import cv2
import numpy as np
image = cv2.imread(r'D:\car1.png')
#将图片从RGB色彩空间转换至HSV色彩空间
hsv_img = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
#下界
lower = np.array([110, 100, 150])
#上界
upper = np.array([125, 200, 255])
#设置mask
mask = cv2.inRange(hsv_img, lowerb=lower, upperb=upper)
kernel = np.ones((5,5), np.uint8)
mask = cv2.dilate(mask, kernel, iterations=10)
最后给图片加上方框便可以完成识别了。
contours, hier = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
x, y, w, h = cv2.boundingRect(c)
if w < 2*h:
continue
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)