使用opencv从图像中移除闪光眩光

2024-10-02 18:18:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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


Tags: therectimg阈值数字opencvcv照片
1条回答
网友
1楼 · 发布于 2024-10-02 18:18:43

眩光实际上以一种不可恢复的方式在本地破坏任何信息

一个解决方案可能是使用OCR引擎,允许“不知道”像素,但AFAIK Tesseract不支持这一点

如果在其他处理之前将亮像素变暗,则损害会减少

相关问题 更多 >