【发布时间】: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