- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试自动读取车牌。我已经训练了一个 OpenCV Haar Cascade 分类器来隔离源图像中的车牌以取得合理的成功。这是一个示例(注意黑色边界矩形)。 在此之后,我尝试清理以下任一项的车牌:
为了清理盘子,我执行了以下转换:
# 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:为 OCR 隔离车牌字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45364434/
我的公司正在寻找任何解决方案-必要时支付软件没有问题-可以“简单地”检查不确定数量的照片(例如从1到400+),检测车牌并像Google在Google中一样对其进行删除/模糊处理 map 。例如。图片
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!