我需要在程序中使用cv::FindContours()
,我必须知道背后的算法。
openCV使用什么算法来查找轮廓?
它是如何工作的?
如果您阅读documentation,则提到此函数实现以下算法:
Suzuki,S。和Abe,K。,边界跟随数字化二值图像的拓扑结构分析。 CVGIP 30 1,第32-46页(1985)
OpenCV是开源的,如果你想看看它是如何实现的,只需要阅读代码:https://github.com/opencv/opencv/blob/master/modules/imgproc/src/contours.cpp#L1655
this question的答案之一与the paper in question有关 ,这个链接已经死了,纸张在支付墙后面,也许谷歌可以帮助找到一个免费的副本。
截至2018年9月,该论文可通过Google Scholar获取。尽管如此,如果论文被删除,这是摘要:
针对数字化二值图像的拓扑分析,提出了两种边界跟随算法。第一个确定二进制图像的边界之间的环绕关系。由于外边界和孔边界分别与l像素和孔的连通分量一一对应,所提出的算法产生二进制图像的表示,从中可以提取某种二进制图像。功能无需重建图像。第二算法是第一算法的修改版本,仅遵循最外边界(即,未被孔包围的外边界)。当使用顺序数字计算机时,这些算法可以有效地用于二进制图像的分量计数,收缩和拓扑结构分析。