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

發佈了4 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章