【发布时间】:2015-08-20 21:01:13
【问题描述】:
我有一些非常简单的图像,我想从中提取最长的轮廓。
示例图片如下所示:
我正在使用来自 OpenCV 教程页面的确切 same sample code。有一点不同,我将阈值设置为一个固定数字,即 100。
主线是这个:
cv::findContours(cannyOutput, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0));
调用上述函数后,我遍历找到的 contours 并检查哪个是最长的,然后我保存最长的那个。在最长的情况下,我的意思是哪一个得分最高。
在某些情况下,如上面的示例图像中,最长的轮廓会加倍。为了更容易理解,我在“加倍”下的意思是找到的轮廓的可视化图像:
所以我试图通过尝试理解OpenCV docs of findContour来弄清楚为什么会发生这种情况,但我仍然无法理解真正的原因。
我设法实现的目标是,如果我从 CV_RETR_TREE 更改为 CV_RETR_EXTERNAL,我不会得到双倍轮廓。
所以我的问题是:
- 双重轮廓背后的原因是什么?为什么 CV_RETR_EXTERNAL 可以解决问题?
- 获得点数最多的轮廓并不一定意味着它是最长的,对吧?由于 CV_CHAIN_APPROX_SIMPLE 标志。例如,CV_CHAIN_APPROX_NONE 会解决这个问题吗?
【问题讨论】:
标签: opencv opencv-contour