【发布时间】:2018-01-03 23:43:41
【问题描述】:
我正在尝试自动读取车牌。 我已经训练了一个 OpenCV Haar Cascade 分类器来隔离源图像中的车牌以取得合理的成功。这是一个示例(注意黑色边界矩形)。 在此之后,我尝试清理以下任一的车牌:
- 隔离单个字符以通过 SVM 进行分类。
- 向 Tesseract OCR 提供清理后的车牌以及有效字符的白名单。
为了清理盘子,我执行了以下转换:
# Assuming 'plate' is a sub-image featuring the isolated license plate
height, width = plate.shape
# Enlarge the license plate
cleaned = cv2.resize(plate, (width*3,height*3))
# Perform an adaptive threshold
cleaned = cv2.adaptiveThreshold(cleaned ,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,7)
# Remove any residual noise with an elliptical transform
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
cleaned = cv2.morphologyEx(cleaned, cv2.MORPH_CLOSE, kernel)
我的目标是将字符隔离为黑色,将背景隔离为白色,同时消除任何噪音。
使用这种方法,我发现我通常会得到以下三个结果之一:
图像太嘈杂。
删除太多(字符脱节)。
合理(所有字符独立且一致)。
I've included the original images and cropped plates in this album.
我意识到由于车牌的不一致性质,我可能需要更动态的清理方法,但我不确定从哪里开始。我尝试过使用阈值和形态函数的参数,但这通常只会导致过度调整到一张图像。
如何改进我的清理功能?
【问题讨论】:
-
你所说的“太吵”其实是“多余的字符或图形太多”,这是美式车牌的共同特征。
标签: python opencv image-processing ocr