我正在构建一个通用的图像文本解析算法。 我在运行:
MSER.detectRegions()
对比
findContours(...cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
在二值图像上。结果是一样的。 我知道 MSER 可以在灰度上完成,但我想更安全。
我需要选择其中之一,findContours()
花费的运行时间不到 MSER
的一半。
我错过了什么吗? 你会选择什么?
最佳答案
如前所述,在二值图像上计算 MSER 没有意义。 MSER 基本上使用递增(递减)阈值多次对图像(灰度)进行阈值处理,您得到的是一个所谓的组件树,就像这样 here .至少在不同的二值化过程中改变其大小/形状的连通分量是所谓的最大稳定极值区域(例如示意图中的 K)。这当然是一个非常简化的解释。请向谷歌询问更多细节,你会发现足够的。
如您所见,对已经阈值化的图像进行阈值化没有意义。所以改为将灰度图像传递给 MSER 算法。 MSER 是最先进的文本检测方法的通用基础(参见 here 和 here)。
关于opencv MSER.detectRegions() 与 findContours() : what's the difference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39490063/