牛奶盒喷码字符识别(基于opencv)————(二)投影法字符分割
效果:
由于图片横纵坐标分明,故可采用投影法进行切割
老规矩线上图:
要做到切割准确率高,给大家做以下难点分析:(避坑指南)
1.比如20和55这些数字挨得太近,导致会识别成一个字符
2.如果最下一行有黑像素或者最右一列有黑像素,会切割失败,是源算法小缺陷
3.膨胀不能太多,不然会导致第一行第二行无法区分
源代码参考博客:
https://blog.csdn.net/Tuzi294/article/details/79959199
以下是我的改进:
1.对于20,55的分割
可以看到 源代码在对于20,54的处理上直接分割,输出end_j-star_j
之后发现,着切割失败的三组数有明显的特征,那就是end_j-star_j
大于100了,所以我们稍加判断(注意逻辑,有点打脑壳)
+8
是个经验数值,使我的分割更好
注意除法需要浮点型,所以/2.0
注意像素不能为浮点型,所以需要使用 math.floor
取整
使用math 记得 import math
elif(data[start: end, j].all() and start_j >= 0):
if(end_j - start_j >= min_val_word and end_j - start_j<100):
print(end_j - start_j)
tmp = data[start:end, start_j: end_j]
im2save