我需要cv::FindContours()
在程序中使用,我必须知道其背后的算法。
openCV用什么算法来寻找轮廓?
它是如何工作的?
我需要cv::FindContours()
在程序中使用,我必须知道其背后的算法。
openCV用什么算法来寻找轮廓?
它是如何工作的?
如果您阅读文档,则提到此函数实现了以下算法:
Suzuki, S. 和 Abe, K.,通过边界跟踪对数字化二进制图像进行拓扑结构分析。CVGIP 30 1,第 32-46 页(1985 年)
OpenCV 是开源的,如果你想看看它是如何实现的,只需要阅读代码: https ://github.com/opencv/opencv/blob/master/modules/imgproc/src/contours.cpp#L1655
截至 2018 年 9 月,该论文可通过Google Scholar获得。尽管如此,如果论文被删除,这里是摘要:
提出了两种边界跟随算法用于数字化二值图像的拓扑分析。第一个确定二值图像边界之间的环绕关系。由于外边界和孔边界分别与 l 像素的连通分量和孔具有一一对应的关系,因此所提出的算法产生了二进制图像的表示,可以从中提取某种特征而不重建图像。第二种算法是第一种算法的修改版本,它只遵循最外边界(即,没有被孔包围的外边界)。当使用顺序数字计算机时,这些算法可以有效地用于二进制图像的分量计数、收缩和拓扑结构分析。