OpenCV中检测到的轮廓数量不匹配

时间:2011-05-17 02:15:26

标签: image-processing opencv

根据文档,函数cvFindContours()返回二进制图像输入中检索到的轮廓的数量。然而,当我在所有轮廓上运行循环时,检测到的轮廓数量大大减少。

可能的原因是父项的子轮廓以及孔在函数的返回值中被计算。即便如此,这个数字与我使用的图片的合理眼睛估计不匹配。

在这种情况下,返回值为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/

1 个答案:

答案 0 :(得分:0)

您可能需要查看文档here。关键部分如下。

  

指针firstContour被填充   功能。它将包含指针   到第一个最外面的轮廓或   如果未检测到轮廓,则为NULL(如果   图像完全是黑色的)。其他   可以从中获得轮廓   firstContour使用h_next和v_next   链接。

您可能需要检查每个h_next的v_next数量(反之亦然)。