[轉]opencv使用cvFindContours提取聯通域


// m_imgFeature為黑白目標圖像,白色為前景,黑色為背景

// 注意此函數會修改m_imgFeature內容。若其不可更改,應另建立副本

// 1. count contour CvMemStorage* storage = 0; storage = cvCreateMemStorage(0);          //開辟默認大小的空間 CvSeq* contour = 0; cvFindContours( m_imgFeature, storage, &contour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );              // 查找外邊緣
int num = 0; for( ; contour != 0; contour = contour->h_next ) {     CvRect rect;     rect = cvBoundingRect(contour,0);        // 轉化為點列     m_arrLine.SetSize(num+1);     m_arrLine.GetAt(num).SetLine(rect.x,rect.x+rect.width ,rect.y,rect.y+rect.height);     num = num+1; 

      for( i = 0; i < contour->total; i++ )       {          CvPoint* line = (CvPoint*)cvGetSeqElem(contour,i);          cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8 );      } }
// .release cvReleaseMemStorage(&storage);

//////////////////end of code////////////////////////////

cvFindContours的第5個參數

CV_RETR_EXTERNAL     查找外邊緣,各邊緣以指針h_next相連

CV_RETR_LIST                查找所有邊緣(包含內部空洞),各邊緣以指針h_next相連

CV_RETR_CCOMP          查找所有邊緣(包含內部空洞),按照如下方式組織

 

藍色表示v_next,綠色表示h_next


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM