C++ C++;函数凸性缺陷中的OpenCv错误

C++ C++;函数凸性缺陷中的OpenCv错误,c++,opencv,convex-hull,C++,Opencv,Convex Hull,我已经读过这些帖子了,但是它们并没有解决我遇到的错误 我的代码 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() >

我已经读过这些帖子了,但是它们并没有解决我遇到的错误

我的代码

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]);
}
矢量缺陷;
向量壳(contours.size());
对于(int i=0;i3)
凸性缺陷(轮廓[i]、外壳[i]、缺陷[i];
}
根据上面的帖子,这应该是可行的,但事实并非如此。我仍然得到错误
错误:(-215)赫尔.校验向量(1,CV_32S)>2在函数凸性缺陷中

我真的看不出这里有什么问题。

据报道:


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

好的,问题主要是由于一些奇怪的原因,我的轮廓非常小,以至于船体仅仅是一条直线(意味着只有2个点)。 因此,错误是指外壳向量的大小,而不是在其他帖子中,它似乎与向量的类型有关

因此,只需更换
if(轮廓[i].size()>3)
具有
if(外壳[i].size()>2)

工作正常。

您好,我没有使用OpenCV 2.1,我使用的是2.4。根据我应该使用和正在使用的convexHull算法,该算法在带有参数“returnPoints=false”的文档中提到,您是否尝试删除if语句?
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