3

我已经阅读了这里这里的帖子,但它们并没有解决我得到的错误。

我的代码

vector<Vec4i> defects;
vector<vector<int> >hull( contours.size() );
for (int i = 0; i < contours.size(); i++)
{
    convexHull( contours[i], hull[i], false, false );
    if(contours[i].size() > 3 )
        convexityDefects(contours[i], hull[i], defects[i]);
}

根据上面的帖子,这应该可以工作,但事实并非如此。我仍然收到错误
error: (-215) hull.checkVector(1, CV_32S) > 2 in function convexityDefects
,我真的没有在这里看到问题。

4

2 回答 2

2

好的,问题主要是由于一些奇怪的原因,我的轮廓太小了,以至于船体只是一条直线(意思是只包含 2 个点)。所以错误是指船体矢量的大小,而不是在其他似乎与矢量类型有关的帖子中。

因此,只需替换
if(contours[i].size() > 3 ) 即可 if(hulls[i].size() > 2 )

于 2012-12-10T10:55:17.170 回答
0

正如关于opencv 参考的报道:

ConvexityDefects(contour, convexhull, storage) → convexity_defects
  Finds the convexity defects of a contour.

Parameters: 
  contour (CvArr or CvSeq) – Input contour
  convexhull (CvSeq) – Convex hull obtained using ConvexHull2 that should contain pointers or indices to the contour points, not the hull points themselves (the return_points parameter in ConvexHull2 should be 0)
  storage (CvMemStorage) – Container for the output sequence of convexity defects. If it is NULL, the contour or hull (in that order) storage is used

特别是,看看第二个参数:你确定是使用ConvexHull2获得的吗?

于 2012-12-05T15:02:28.847 回答