我想将OCR应用于墙上7段显示的一些图片。我的策略如下:
如何设置ROI以便我的程序不必在整个图像中查找模板?我希望根据找到的边数设置我的投资回报率,或者如果有人可以帮助我,那么我会更有用。
我正在研究Cascade Classification和Haar,但我不知道如何将它应用到我的问题中。
这是预处理和边缘检测后的图像:
原始图片
答案 0 :(得分:3)
如果这代表你必须处理的边数,你可以尝试一个很好的天真策略,比如在二进制图像上滑动ROI-finder窗口,它只是对像素值求和,并且不会触发,除非该值高于阈值。这应该优化所有空白表面。
编辑: 好吧一些不太天真的方法。如果您有一些先验知识,就像您知道照片已经很好地对齐(并且没有严重旋转或歪斜),您可以使用低 - 高 - 低 - 高的栅格进行一些通过调整以捕获任何一侧的边缘段,在x和y维度上使用不同的比例。两个方向的良好打击不仅可以提供有关投资回报率的线索,还可以提供开始时的模板规模(过大和过小的格栅不会同时击中两个边缘)。
您可以执行blob检测,然后依次将模板应用于blob(如果模板匹配分数低于阈值,则返回合并blob,以防您的数字段被意外分区)。 blob的大小可能会再次给出一些关于要应用的模板规模的提示。
答案 1 :(得分:0)
首先,假设原始图像具有LED显示,因此照明区域的强度高于背景,我会对原始图像执行Yuv颜色转换,然后使用强度平面(Y)。
接下来,如果您知道图像对齐良好(即未旋转),我建议应用单独的水平和垂直边缘检测器而不是通用边缘检测器(您对对角线不感兴趣)。 E.g。
sobelx = cv2.Sobel( img, cv2.CV_64F, 1, 0, ksize=5 )
sobely = cv2.Sobel( img, cv2.CV_64F, 0, 1, ksize=5 )
否则,您可以使用轮廓检测来查找数字的边界(尽管您可能需要执行扩张来关闭LED段之间的间隙。
接下来,我将构建来自这些边缘或轮廓检测的输出的水平和垂直直方图。这些可以帮助您识别忙碌的'图像中包含许多边缘的区域。
最后,我对Y平面进行阈值处理,并使用我的模板探索每个投资回报率。