Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing OpenCV中检测到的轮廓数不匹配_Image Processing_Opencv - Fatal编程技术网

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

Image processing OpenCV中检测到的轮廓数不匹配,image-processing,opencv,Image Processing,Opencv,根据文档,函数cvFindContours()返回从二进制图像输入检索到的轮廓数。然而,当我在所有轮廓上运行循环时,检测到的轮廓数量明显减少 一个可能的原因是父对象的子轮廓以及孔都被计算在函数的返回值中。即使如此,这个数字也不符合我对所用图片的合理估计 在本例中,返回值为92,而在遍历所有轮廓时,有15个不同的轮廓 代码如下: int n = cvFindContours(img_canny_mop, mem, &contours, sizeof(CvContour), CV_RETR_

根据文档,函数
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);
图片如下:

输入:


随机彩色轮廓:

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

指针的第一个轮廓由 功能。它将包含指针 到第一个最外轮廓或 如果未检测到轮廓(如果 图像完全是黑色的)。另外 可从以下位置获得轮廓: 使用h_next和v_next的第一个轮廓 链接

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