我正在使用OpenCV python从电度表的照片中提取电度表编号。我使用Yolov4对照片进行裁剪/检测,如下所示: The original Image
然后我对它进行一些操作,包括使它变灰、模糊、阈值化,然后关闭。没有眩光的照片效果很好。但是上面的图片不是
“灰度缩放” 灰色\u img=cv.CVT颜色(img,cv.COLOR\u rgb2灰色)
模糊=cv.GaussianBlur(灰色(5,5),0)
rect_kern=cv.getStructuringElement(cv.MORPH_rect,(5,5))
ret,thresh=cv.threshold(模糊图像,0,255,cv.thresh\u OTSU | cv.thresh\u二进制图像)
关闭=cv.morphologyEx(阈值、cv.Morpho\u关闭、rect\u kern、迭代次数=2)
扩张=cv.扩张(阈值、矩形、迭代次数=1)
#寻找轮廓
等高线,层次=等高线(闭合,等高线树,等高线链近似简单)
排序的轮廓=排序的(轮廓,键=lambda中心:cv.boundingRect(中心)[0])`
然后,我计算每个轮廓的宽度和高度的比率,找到数字并将其传递给ocr,但这不是我问这个问题的目的。上图和上述代码的结果如下所示
The final image before reading with the ocr
正如你在数字9和1周围看到的,眩光导致无法读取数字。有人来解决这个问题吗。我愿意接受任何建议,甚至可能使用OpenCV以外的其他工具。顺便说一句,我使用tesseract作为ocr
眩光实际上以一种不可恢复的方式在本地破坏任何信息
一个解决方案可能是使用OCR引擎,允许“不知道”像素,但AFAIK Tesseract不支持这一点
如果在其他处理之前将亮像素变暗,则损害会减少
相关问题 更多 >
编程相关推荐