车载摄像头检测车牌

时间:2016-08-22 03:02:57

标签: python image opencv image-processing

我正在使用Python和Opencv。我正在做一个用汽车摄像头识别车牌的项目。

我曾尝试使用Canny(),但我仍然无法识别该牌照。

这是我拍摄的帧。 enter image description here

1)

首先,我将图像转换为灰度,增加颜色合约,最后将其转换为“边缘图像”< / p>

img = cv2.imread("plate.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.equalizeHist(gray)
edged = cv2.Canny(gray, 200, 255)

以下是我得到的结果: enter image description here

2)

之后,我尝试找到如下的矩形轮廓,我试图按面积和长度滤除无关矩形不规则多边形 convexHull()

(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts=sorted(cnts, key = cv2.contourArea, reverse = True)[:10]

# loop over our contours
plate_candidates = []
    for c in cnts:
        peri = cv2.arcLength(c, True)
        approx = cv2.approxPolyDP(c, 0.02 * peri, True)
        area = cv2.contourArea(approx)
        if len(approx) == 4 and area <=1000 and area >=500 and self._length_checking(approx):
            hull = cv2.convexHull(approx,returnPoints = True)
            if len(hull) ==4:
                plate_candidates.append(approx)
                cv2.drawContours(show, [approx], -1, (0,255,0), 3)
但是,我仍然无法识别盘子。我正在寻求帮助如何检测车牌。谢谢。

1 个答案:

答案 0 :(得分:1)

你可以使用凸包的最小边界矩形来计算&#34;矩形&#34;您的候选轮廓(在最新版本的openCV中,您可以使用cv2.boxPoints来计算rectPoints):

def rectangleness(hull):
    rect = cv2.boundingRect(hull)
    rectPoints = np.array([[rect[0], rect[1]], 
                           [rect[0] + rect[2], rect[1]],
                           [rect[0] + rect[2], rect[1] + rect[3]],
                           [rect[0], rect[1] + rect[3]]])
    intersection_area = cv2.intersectConvexConvex(np.array(rectPoints), hull)[0] 
    rect_area = cv2.contourArea(rectPoints)
    rectangleness = intersection_area/rect_area
    return rectangleness

然而,在你的情况下,这实际上是矫枉过正的,它足以使用多边形的区域 - 你区域内截止的多边形(cnts中的前两个轮廓)可用于获取车牌周围的边界矩形。