我们正在使用opencv for android实现OCR,一切顺利,直到使用Imgproc.findcontours()找到轮廓的部分,它返回的轮廓与输入图像中的轮廓不同 即: 输入图像M N O P第一个轮廓来自findcontours()是P. 输入图像E F G H第一个轮廓来自findcontours()是E(这里是右边) 输入图像I J K L来自findcontours()的第一个轮廓是J 所以它似乎随机抽取轮廓我们如何解决这个问题?因为我们想要回复这个词,因为它完全是在图像中写的
答案 0 :(得分:9)
OpenCV在查找轮廓时似乎没有任何顺序。如果我们需要它排序,我们应该手动完成,这是一项额外的任务。
但是出于OCR的目的,我也有这个问题。所以我所做的就是找到检测到的轮廓的质心。可以通过片刻找到它。
Finding centroid using Moments
或者你可以找到轮廓的边界框,然后找到该边界框的中心。之后ocr将数据放在同一个质心上。
这是我自己准备OCR时使用的方法。您可以在此SOF问题中找到完整的详细信息:Simple Digit Recognition OCR in OpenCV-Python
编辑: FindContours的顺序,(来自vasile的评论后)
原始图片:
找到找到的轮廓的顺序: