构建块并隔离OpenCV中的字符

构建块并隔离OpenCV中的字符,opencv,ocr,Opencv,Ocr,我一直在寻找这个问题的答案,但找不到任何有用的答案 我正试图用相机读取机器可读区域。我需要从机器可读区中一个接一个地提取字符,并将其输入OCR。我试图对图像设置阈值,寻找轮廓,一个接一个地提取字符,但当它在实时摄像机上时,发现轮廓遗漏了一些字符,我得到的结果并不像我预期的那样 虽然机器可读区的大小和形式已知,但是否有合适的方法为每个字符构建块并提取它们 更新代码 rect = [] blur = cv2.medianBlur(roi_gray,3) #roi_gray is aligned ho

我一直在寻找这个问题的答案,但找不到任何有用的答案

我正试图用相机读取机器可读区域。我需要从机器可读区中一个接一个地提取字符,并将其输入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=[]
模糊=cv2。中间模糊(roi_gray,3)#roi_gray与MRZ区域水平对齐
阈值=cv2.自适应阈值(模糊,255,cv2.自适应阈值,高斯,cv2.阈值二进制,11,2)
_,轮廓,层次=cv2.findContours(thresh.copy(),cv2.RETR\u CCOMP,cv2.CHAIN\u近似值\u SIMPLE)
轮廓=已排序(轮廓,键=cv2.contourArea,反转=真)[:90]
明=20
最小值=20
对于等高线中的ctr:
如果cv2.轮廓面积(ctr)<1000:
xyc,wh,a=cv2.minareact(ctr)
w、 h=wh
x、 y=xyc
如果h>=minH或w>=minW:
rect.append(cv2.boundingRect(cv2.approxPolyDP(ctr,3,True)))
rect包含收集到的轮廓,但问题是,在作为示例对字符N进行阈值化后,字符N被拆分为两个轮廓,或者FindOntours没有找到它,所以最终输出中缺少字母

视频


我发现视频中似乎有作者为每个角色构建块,但不幸的是,作者并没有提供任何关于方法或代码的附加信息

对我来说,感兴趣的ID文本区域有一个纵横比,也许块意味着该文本区域。如果存在纵横比(-+错误),则可能会删除其他文本区域。在OpenCV 3中有一个。 此外,我认为检测到的区域是被跟踪的,至少在视频中是这样

据我所知,该应用程序正在进行模糊处理,然后进行二值化,然后进行腐蚀放大以检测文本行。因此,在进行包裹校正(或者甚至是一点透视校正)后,通过垂直投影可以检测字符宽度,这样就可以检测每个字符并将其输入OCR


根据注释,我添加了角色区域的信息。我会做一个打开操作来填充字母内部的空白,或者连接轮廓。然后,简单地对像素值进行垂直求和,就可以得到垂直投影。现在你有一些字符之间的最小值。使用这些最小值,您可以通过平均它们之间的距离来获得字符宽度

您还可以做的不是在每个帧上处理这个宽度,而是获得一个在连续帧上变化不大的宽度。您可以通过在最后5帧(使用队列)中对宽度进行平均来实现这一点

尝试一下,并返回一些结果,像这样,我们将能够帮助您更多


还有一个,你可能会在那里找到更多信息

如果你至少向我们提供了一张你描述的情况的图片,我们将更容易帮助你。我提供了一个视频链接是的,但这是一个工作软件。如果你能告诉我们你到底哪里有问题,那么帮助你就容易多了。例如,像阈值化后和轮廓查找期间的图像。你最大的敌人是缩放和透视变换-视频演示了一种算法,该算法对较小的角度变换非常鲁棒。是的,你在阈值设置之后,我遇到了角色消失时的缩放问题,例如角色N在阈值设置之后,findContour发现的是两个轮廓而不是一个轮廓。很抱歉,我现在无法上传图片,我将稍后再上传。我不知道我是否正确,但如果我能够找到左上角、右上角、左下角、右下角的4个字符,以便我可以获得MRZ区域的真实尺寸?何时计算字符之间的距离,何时才能得到字符的实际大小和位置?对不起,我可能错了,我是简历新手,我只是在猜测。我已经检测到感兴趣的文本,提取它,进行透视校正,我得到了3行MRZ文本,你能解释更多关于垂直投影的内容吗?因为我发现的主要问题是缺少字母或它们的结构,就像我在检测字符N之前说的,就像两个轮廓一样。