【问题标题】:Remove flash glare from image using opencv使用opencv从图像中去除闪光眩光
【发布时间】:2021-07-06 19:38:33
【问题描述】:

我正在使用 OpenCV python 从电表照片中提取电表编号。我使用 Yolov4 裁剪/检测到照片,如下所示: The original Image

然后我对其进行一些操作,包括使其变灰、模糊、阈值化,然后关闭。没有眩光的照片效果很好。但是像上面那张图就不是了。

`#灰度缩放 gray_img = cv.cvtColor(img, cv.COLOR_RGB2GRAY)

blur_img = cv.GaussianBlur(gray_img, (5,5), 0)

rect_kern = cv.getStructuringElement(cv.MORPH_RECT, (5,5))

ret, thresh = cv.threshold(blur_img, 0, 255, cv.THRESH_OTSU | cv.THRESH_BINARY_INV)

关闭 = cv.morphologyEx(thresh, cv.MORPH_CLOSE, rect_kern, iterations=2)

膨胀 = cv.dilate(thresh, rect_kern, 迭代次数 = 1)

#寻找轮廓

轮廓,层次结构 = cv.findContours(close, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

sorted_contours = sorted(contours, key=lambda ctr: cv.boundingRect(ctr)[0])`

然后,我计算每个轮廓的宽度和高度的比率以找到数字并将它们传递给 ocr,但这不是我提出这个问题的目的。上图和上面代码的结果如下。

The final image before reading with the ocr

您可以在数字 9 和 1 周围看到眩光,导致无法读取数字。有没有人来解决这个问题。我愿意接受任何类型的建议,甚至可能使用 OpenCV 以外的东西。顺便说一句,我正在使用 tesseract 作为 ocr。

【问题讨论】:

  • 抱歉问题结构不好。第一次
  • 也许只是将图像剪辑到某个最大亮度。 gray_img.clip(0,XXX)
  • 经过大量试验。我发现最好的方法是使用自适应阈值。

标签: python opencv image-processing ocr python-tesseract


【解决方案1】:

Glare 实际上是以不可恢复的方式在本地破坏任何信息。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 2021-07-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多