cvBoundingRect不起作用

时间:2013-03-23 09:05:15

标签: c++ opencv

我将 cvFindContours 的输出传递给 cvBoundingRect 。但它给出了这个错误:

OpenCV错误:cvBoundingRect中的错误参数(不支持的序列类型),文件/home/z/src/OpenCV-2.4.2/modules/imgproc/src/shapedescr.cpp,第950行 在抛出'cv :: Exception'的实例后终止调用   what():/home/z/src/OpenCV-2.4.2/modules/imgproc/src/shapedescr.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);
}

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

3 个答案:

答案 0 :(得分:0)

cvBoundingRect()占用1个轮廓,你将它们全部送入其中

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

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