分割车牌字符#ImageProcessing
Segmenting License Plate Characters #ImageProcessing
对于一个大学项目,我必须使用 Python 从车牌中分割字符。这听起来相当简单。然而,问题是我们不允许使用任何复杂的库函数,例如 cv2.findContours()。 cv2.imread() cv2.resize() cv2.rectangle() 等基础知识是允许的。
我编写了一个函数,可以在图像中定位车牌并输出图像中可以看到的结果 Output 1 and Output 2。这些是二进制图像。
如你所见。有时候,这个函数的输出比较干净(Output 2). However, often it is also noisy (Output 1)
为了获得干净的图像 (Output 2),我尝试查找包含少于 x 个黑色像素的列以分割字符。但是,这仅在图像干净时有效。通常情况并非如此。在这里更改 x 参数并没有显着改善。
有人对我如何解决这个问题有什么建议吗?
对于基本解决方案,您可以通过计算所有垂直线上的黑色像素来形成轮廓。然后在此配置文件的滑动区间内查找平均计数的最大值和最小值。间隔长度应该是字符预期宽度的一小部分。只应考虑具有足够对比度的极值。
为避免旋转板中周围特征的影响,您可以将计数限制为仅对图像的一部分进行计数。
一旦你有字符之间的近似垂直限制,你可以重复类似的处理来获得字符的底部和顶部限制(不再需要滑动间隔)。
最后,您可以通过找到如此形成的矩形中的水平界限来优化装箱。
对于一个大学项目,我必须使用 Python 从车牌中分割字符。这听起来相当简单。然而,问题是我们不允许使用任何复杂的库函数,例如 cv2.findContours()。 cv2.imread() cv2.resize() cv2.rectangle() 等基础知识是允许的。
我编写了一个函数,可以在图像中定位车牌并输出图像中可以看到的结果 Output 1 and Output 2。这些是二进制图像。
如你所见。有时候,这个函数的输出比较干净(Output 2). However, often it is also noisy (Output 1)
为了获得干净的图像 (Output 2),我尝试查找包含少于 x 个黑色像素的列以分割字符。但是,这仅在图像干净时有效。通常情况并非如此。在这里更改 x 参数并没有显着改善。
有人对我如何解决这个问题有什么建议吗?
对于基本解决方案,您可以通过计算所有垂直线上的黑色像素来形成轮廓。然后在此配置文件的滑动区间内查找平均计数的最大值和最小值。间隔长度应该是字符预期宽度的一小部分。只应考虑具有足够对比度的极值。
为避免旋转板中周围特征的影响,您可以将计数限制为仅对图像的一部分进行计数。
一旦你有字符之间的近似垂直限制,你可以重复类似的处理来获得字符的底部和顶部限制(不再需要滑动间隔)。
最后,您可以通过找到如此形成的矩形中的水平界限来优化装箱。