查找轮廓总结

轮廓到底是什么东西?一个轮廓一般对应一系列的点,也就是图像中的一条曲线,以序列的形式存储,序列的每一个元素是曲线中一个点的位置。

findContours()从二值图像中查找轮廓,图像可以是从canny()函数得到,或者是threshold函数得到。

首先有轮廓树的概念,c代表的是轮廓,h代表的是孔,opencv的findcontours(),可以区分内部和外部边界。

包含的概念在很多应用中都非常重要。(这个以后估计会有所体会的!)

opencv允许得到的轮廓被聚合成一个轮廓树,从而把包含关系编码到树结构中。例如轮廓数的根节点的轮廓叫c0,孔h00和h01是它的子节点。这些轮廓中直接包含的轮廓成为他们的子节点,依次类推。

hierarchy[idx][0]是轮廓树遍历的方式,每个contours[i]中对应了4个hierarchy元素,hierarchy[i][0]~hierarchy[i][3],分别代表后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓。

这个是推酷上看到的一种轮廓遍历的例子,挺能表达轮廓遍历的意思的,还得多用才能熟练掌握轮廓的遍历。

//---------------------------------------------------------------------------------------------------------------------------------------------

//轮廓模式为CV_RETR_CCOMP,第一层为连通域的外围边界,因为我们前景颜色值为255,背景为0

//所以得到的轮廓为外围边界,所以我们只需要第一层,hierarchy[idx][0]表示为下一个轮廓的索引

//如果到达最后一个轮廓,则hierarchy[idx][0]=-1;
for (; idx >= 0; idx = hierarchy[idx][0])
{
const vector<Point>& c = contours[idx];
double area = fabs(contourArea(Mat(c)));
if (area > maxArea)
{
maxArea = area;
largestComp = idx;//找出包含面积最大的轮廓
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值