【问题标题】:Mismatch in number of detected contours in OpenCVOpenCV中检测到的轮廓数量不匹配
【发布时间】:2011-05-17 12:28:26
【问题描述】:

根据文档,函数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/

【问题讨论】:

    标签: image-processing opencv


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-24
      • 2011-12-13
      • 2014-07-27
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      相关资源
      最近更新 更多