【发布时间】:2017-02-28 09:05:12
【问题描述】:
我一直在寻找这个问题的答案,但找不到任何有用的东西。
我正在尝试使用相机读取机器可读区域。我需要从机器可读区域中一一提取字符并提供给 OCR。我尝试对图像进行阈值处理,找到轮廓,逐个提取字符,但是当它在实时摄像头上时,发现轮廓丢失了一些字符,我得到的结果与我预期的不一样。
虽然机器可读区域的大小、形式是已知的,但是否有适当的方法为每个字符构建块并提取它们?
更新代码
rect = []
blur = cv2.medianBlur(roi_gray,3) #roi_gray is aligned horizontally MRZ zone
thresh = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)
_,contours, hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key=cv2.contourArea, reverse = True)[:90]
minH = 20
minW = 20
for ctr in contours:
if cv2.contourArea(ctr) < 1000:
xyc,wh,a = cv2.minAreaRect(ctr)
w,h = wh
x,y = xyc
if h >= minH or w >= minW:
rect.append(cv2.boundingRect(cv2.approxPolyDP(ctr,3,True)))
rect 包含收集的轮廓,但问题是在阈值处理后,例如字符 N 分裂成两个轮廓,或者 findContours 没有找到它,因此最终输出中缺少字母。
视频
我发现视频似乎是每个角色的作者构建块,但不幸的是作者没有提供有关方法或代码的任何其他信息。 Video link
【问题讨论】:
-
如果您向我们提供了您所描述情况的至少一张图片,我们会更容易为您提供帮助。
-
我提供了视频链接
-
是的,但这是一个工作软件。如果您向我们展示了您的具体问题所在,那么帮助您会更容易。例如,阈值处理后和轮廓查找期间的图像。您最大的敌人是比例和视角变化 - 该视频演示了一种对微小角度变化相当稳健的算法。
-
是的,你是在阈值之后我遇到了字符消失时的比例问题,例如阈值后的字符 N,findContour 发现两个轮廓而不是一个轮廓。很抱歉我现在不能上传图片,我会稍后再做。
-
我不知道我是对的,但如果我能找到左上角、右上角、左下角、右下角 4 个字符,这样我就可以获得机读区的真实尺寸?何时计算字符之间的距离以及何时可以获得字符的实际大小和位置?对不起,我可能是错的,我是 CV 的新手,我只是在猜测。