【opencv學習】-詳解cvFindContours()中的CV_RETR_LIST

注意:本文主要針對各個輪廓均爲同一等級的圖像。

已知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均爲空。

下圖爲測試圖像之一,得出的輪廓順序如紅色數字:

                                                                           

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章