0

我将cvFindContours的输出(即轮廓)传递给cvBoundingRect。但它给出了这个错误:

OpenCV 错误:cvBoundingRect 中的错误参数(不支持的序列类型),文件 /home/z/src/OpenCV-2.4.2/modules/imgproc/src/shapeescr.cpp,第 950 行终止在抛出 'cv:: 实例后调用异常'what():/home/ z/src/OpenCV-2.4.2/modules/imgproc/src/ shapeescr.cpp:950:错误:(-5)函数cvBoundingRect中不支持的序列类型

这是代码:

CvRect rect;
cvFindContours( imgB, g_storage, &contours,sizeof(CvContour),CV_RETR_LIST, CV_CHAIN_CODE,cvPoint(0,0));
if(contours)
{cvDrawContours(img_B,contours, CV_RGB(250,0,0), CV_RGB(0,0,250),1,2,8);
rect=cvBoundingRect(contours);
}

请告诉我这个错误的原因可能是什么。解决办法是什么?谢谢

4

3 回答 3

0

cvBoundingRect() 需要 1 个轮廓,您将它们全部输入其中

于 2013-03-23T09:21:49.923 回答
0

好的,我找到了答案。下面是正确的方法:

http://singhgaganpreet.com/tag/cvboundingrect-example/

于 2013-03-23T17:17:12.880 回答
0

从 berak 离开的地方继续,CvSeq** first_contour 是您提供的功能。

指针 first_contour 由函数填充。如果没有检测到轮廓(如果图像完全是黑色),它将包含指向第一个最外层轮廓的指针或 NULL。可以使用 h_next 和 v_next 链接从 first_contour 到达其他轮廓。

所以你需要这样的东西:

CvSeq* contour = *contours;
while (contour != NULL)
{
    //insert boundingbox and other code
    contour = contour->h_next;
}
于 2013-03-23T14:59:25.040 回答