2011-05-17 103 views
1

根據文檔,功能cvFindContours()返回二進制圖像輸入中檢索到的輪廓數量。但是,當我在所有輪廓上運行循環時,檢測到的輪廓數量明顯較少。OpenCV中檢測到的輪廓數量不匹配

一個可能的原因是父函數的子輪廓以及函數的返回值中計數的空洞。即使如此,這個數字也不能與我所用圖片的合理估價相匹配。

這種情況下的返回值是92,而在遍歷所有輪廓時,有15個不同的輪廓。

下面的代碼:

int n = cvFindContours(img_canny_mop, mem, &contours, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0)); 
printf("No of retrieved contours = %d",n); 
for (ptr = contours; ptr != NULL; ptr = ptr->h_next) 
{ 
     ext_color = CV_RGB(rand()&255, rand()&255, rand()&255); //randomly coloring different contours 
     cvDrawContours(cc_color, ptr, ext_color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0));   
     //display(cc_color, "CCs"); 
     n_cont++; 
} 
cvSaveImage("CC_colors.jpg",cc_color); 
printf("\nNo of contours = %d",n_cont); 

的圖像是:

輸入:http://imageshack.us/photo/my-images/811/cannymop.jpg/

隨機顏色的輪廓:http://imageshack.us/photo/my-images/819/cccolors.jpg/

回答

0

你可能想看看文檔here。關鍵部分如下。

指針firstContour填充了 的函數。如果未檢測到輪廓(如果 圖像完全黑色),它將包含指針 到第一個最外輪廓或 NULL。其他 等高線可從 firstContour使用h_next和v_next 鏈接。

可能您需要檢查每個h_next的v_next的數量(反之亦然)。