【opencv学习】-详解cvFindContours()中的CV_RETR_LIST

本文深入解析cvFindContours函数的工作原理,详细说明了如何在图像中从左上角开始,逐行向下扫描查找轮廓,并将找到的轮廓点存储到序列中。同时,文章阐述了轮廓之间的链接方式,以及轮廓序列的构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:本文主要针对各个轮廓均为同一等级的图像。

已知cvFindContours()函数形式如下:

int cvFindContours(
    IplImage*       img,
    CvMemStorage*   storage, 
    CvSeq**         first_contour,    
    int             header_size=sizeof(CvContour),    
    int             mode=CV_RETR_LIST,    
    int             method=CV_CHAIN_APPROX_SIMPLE,    
    );

经多组图像数据测试,猜测得出cvFindContours()寻找轮廓以及CV_RETR_LIST保存轮廓的规律:

  1. 从图像(0,0)处开始,逐行向下扫描。
  2. 当在point(x1,y1)处找到第一个轮廓的时候,将该轮廓曲线上的点逐个存入序列seq1。
  3. 然后重新回到point(x1,y1)处开始扫描,扫描时以某种方式跳过已找到的轮廓。
  4. 当在point(x2,y2)处找到第2个轮廓时,将该轮廓曲线上的点逐个存入序列seq2;同时在seq1与seq2之间建立联系,使得:seq2->h_next==seq1; seq1->h_prev==seq2。
  5. 以此类推,直到图像的右下角最后一个点结束扫描;同时将最后一个轮廓的指针seqn赋值给参数列表中的(*fist_contour)。

最终,得到n个轮廓。相邻轮廓满足seq_high->h_next==seq_low; seq_low->h_prev==seq_high;

seq1->h_nextseqn->h_prev均为空。

下图为测试图像之一,得出的轮廓顺序如红色数字:

                                                                           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值