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的数量(反之亦然)