根据文档,函数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/
答案 0 :(得分:0)
您可能需要查看文档here。关键部分如下。
指针firstContour被填充 功能。它将包含指针 到第一个最外面的轮廓或 如果未检测到轮廓,则为NULL(如果 图像完全是黑色的)。其他 可以从中获得轮廓 firstContour使用h_next和v_next 链接。
您可能需要检查每个h_next的v_next数量(反之亦然)。